【问题标题】:Sorting an array in perl and returning the result in one line在 perl 中对数组进行排序并在一行中返回结果
【发布时间】:2018-10-06 23:54:04
【问题描述】:

我正在尝试将 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

任何线索如何从上面的代码中实现这一点?谢谢。

【问题讨论】:

    标签: perl sorting scripting-language interpreted-language


    【解决方案1】:

    来自 readline 运算符 (&lt;&gt;) 的输入通常会在行尾包含换行符,因此您需要将其传递给 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】:

      您的主要答案不是 $a 和 $b 颠倒了吗? 手术路线应该是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-07
        • 1970-01-01
        • 2011-06-19
        • 2017-08-16
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多