【问题标题】:how to sort an array by a selected value in perlperl中如何按选定的值对数组进行排序
【发布时间】:2015-01-04 05:50:04
【问题描述】:

我以这种方式在数组中包含字符串

/hello/Stack/oveflow 14
/hello/Stack/oveflow 11
/hello/Stack/oveflow 12
/hello/Stack/oveflow 166
/hello/Stack/oveflow 1
/hello/Stack/oveflow 2
/hello/Stack/oveflow 5

我必须按最后一个数字排序

是否可以使用sort 来做到这一点?

【问题讨论】:

    标签: arrays perl sorting


    【解决方案1】:

    是的,sort 正是您所需要的。只需提供代码块来比较两个元素:

    my @sorted = sort { ($a =~ /[0-9]+/g)[-1]
                        <=>
                        ($b =~ /[0-9]+/g)[-1]
                      } @array;
    

    &lt;=&gt; 进行数值比较。匹配返回字符串中的所有数字,[-1] 选择最后一个。

    【讨论】:

    • 非常感谢,sort 不能用于给定的数组,我的意思是,它总是创建一个排序的新数组?
    • @YokupokuMaioku:对于@array = sort { ...} @array;,Perl 进行就地排序。见stackoverflow.com/q/5163064/1030675
    • 另请注意。如果您对数据进行一些转换。在这种情况下,在 $a 和 $b 上运行正则表达式,使用 Schwartzian Transformation 来提高性能是有意义的
    猜你喜欢
    • 2023-04-01
    • 2018-12-05
    • 2011-03-17
    • 1970-01-01
    • 2014-09-16
    • 2015-01-22
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多