代码之家  ›  专栏  ›  技术社区  ›  tavalendo

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

  •  2
  • tavalendo  · 技术社区  · 7 年前

    我试图在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

    澳大利亚银行

    我想要的结果是:

    你的短信是:ZSAHS FGDSJ ABCNA

    从上面的代码中有什么线索可以实现这一点吗?谢谢。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Grinnz    7 年前

    来自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);
    
        2
  •  0
  •   Bruce Van Allen    7 年前

    主要的答案不是你把$a和$b颠倒了吗?

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