perl - 按数字降序排序,然后按字母顺序排序
perl - sort descending numerically, then alphabetically
好的,这是手头的任务:取一个平面数据文件并根据数组元素之一的数值对内容进行排序,然后按字母顺序排序(同时保留降序数字排序顺序)。
数据文件是这样的:
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
我很茫然,找不到任何可以解决我在这里需要做的事情的东西。我很感激任何人在解决这个问题上的投入。
首先,将字符串分成要比较的部分。然后,比较零件。
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;
好的,这是手头的任务:取一个平面数据文件并根据数组元素之一的数值对内容进行排序,然后按字母顺序排序(同时保留降序数字排序顺序)。
数据文件是这样的:
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
我很茫然,找不到任何可以解决我在这里需要做的事情的东西。我很感激任何人在解决这个问题上的投入。
首先,将字符串分成要比较的部分。然后,比较零件。
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;