在perl中对数组排序并在一行中返回结果

时间:2018-10-06 23:54:05

标签: perl sorting scripting-language interpreted-language

我正在尝试将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 :(得分:4)

来自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);

答案 1 :(得分:-1)

主要的答案不是您的$ a和$ b取反了吗? 操作线应为:

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