Сортировка массива в perl и возвращение результата в одну строку - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь отсортировать массив в Perl от Z до A и вернуть отсортированный массив в одну строку.

То, что я делаю, это:

sub mainTexts {

    my @texts = ();

    print ("Enter text 1: ");
    my $text1 = <STDIN>;
    push @texts, $text1;
    print ("Enter text 2: ");
    my $text2 = <STDIN>;
    push @texts, $text2;
    print ("Enter text 3: ");
    my $text3 = <STDIN>;
    push @texts, $text3;

    my @sorted_texts = sort { lc($b) cmp lc($a) } @texts;

    print "Your texts are: ", @sorted_texts;


}

mainTexts();

Это приводит к:

Ваши тексты: ZSAHS

FGDSJ

ABCNA

В то время как я хочу получить результат:

Ваши тексты: ZSAHS FGDSJ ABCNA

Любая подсказка, как добиться этого с помощью кода выше?Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Разве основной ответ не в том, что у вас $ a и $ b поменялись местами?Оперативная строка должна быть:

my @sorted_texts = sort { lc($a) cmp lc($b) } @texts;
0 голосов
/ 07 октября 2018

Входные данные от оператора readline (<>) обычно содержат символ новой строки в конце строки, поэтому вам нужно передать его в chomp .Затем вы можете интерполировать массив непосредственно в строку, а не передавать его в качестве дополнительных аргументов для печати.Интерполяция массива разделяет каждый аргумент с $ ", который по умолчанию равен пробелу, в то время как отдельные аргументы для печати разделяются на $, , который не имеет значения по умолчанию, но обычно имеет значениеперевод строки.

my @texts;

print ("Enter text 1: ");
chomp(my $text1 = <STDIN>);
push @texts, $text1;
print ("Enter text 2: ");
chomp(my $text2 = <STDIN>);
push @texts, $text2;
print ("Enter text 3: ");
chomp(my $text3 = <STDIN>);
push @texts, $text3;

my @sorted_texts = sort { lc($b) cmp lc($a) } @texts;

print "Your texts are: @sorted_texts\n";

Поскольку chomp также может работать со списком, вы можете просто добавить один вызов chomp вместо того, чтобы прочитать все входные данные.

chomp(@texts);
...