【问题标题】:perl - sort descending numerically, then alphabeticallyperl - 按数字降序,然后按字母顺序
【发布时间】:2015-09-28 02:56:58
【问题描述】:

好的,这是手头的任务:获取一个平面数据文件并根据数组元素之一的数值对内容进行排序,然后按字母顺序排序(同时保留降序的数字排序顺序)。

数据文件是这样的:

data1*oranges*3
data2*zebras*23
data3*apples*456
data4*pears*2
data5*orangutans*3
data6*peaches*1

所以我们希望输出是:

data3*apples*456
data2*zebras*23
data1*oranges*3
data5*orangutans*3
data4*pears*2
data6*peaches*1

我不知所措,无法真正找到任何可以解决我需要在这里做的事情。我很感激任何人在解决这个问题方面的意见。

【问题讨论】:

  • 在*nix中,你可以使用sort -t\* -k3rn -k2,2

标签: perl sorting numerical alphabetical


【解决方案1】:

首先,将字符串分成要比较的部分。然后,比较零件。

my @sorted = sort {
   my @fields_a = split /\*/, $a;
   my @fields_b = split /\*/, $b;
   $fields_b[2] <=> $fields_a[2] || $fields_a[1] cmp $fields_b[1]
} @unsorted;

重复的工作更少:

my @sorted =
   map $_->[0],
   sort { $b->[3] <=> $a->[3] || $a->[2] cmp $b->[2]
   map [ $_, split /\*/ ],
   @unsorted;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多