Thread '3,6-10,16,23' in (3,6,7,8,9,10,16,23) umwandeln (12 answers)
Opened by mixxer at 2019-08-22 22:28

styx-cc
 2019-08-23 01:14
#190384 #190384
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hi.
Ich finde deine Lösung eigentlich ganz ok. Hab Dir mal ne Alternative gebastelt, unterscheidet sich aber nicht maßgeblich. Vllt. findet jmd. anderes eine "bessere" Variante, ein Fachbegriff ist mir auch nicht bekannt:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;

my $text = '1-20,1,1,1,2,4,5,8,9,3-4';

my $list = _text_to_list( $text );
print Dumper $list;

sub _text_to_list {
my $text = shift;

my %numbers;
my @list = split /,/, $text;

for (@list) {
my @range = split /-/;
$range[1] = defined $range[1] ? $range[1] : $range[0];
$numbers{$_} = 1 for $range[0] .. $range[1];
}

return [sort {$a <=> $b} keys %numbers];
}


Edit: Rückgabewert als Referenz, wie im Original gefordert, statt alks Array
Last edited: 2019-08-23 01:19:38 +0200 (CEST)
Pörl.

View full thread '3,6-10,16,23' in (3,6,7,8,9,10,16,23) umwandeln