我不知道确切的词,但这正是我在Perl中想要实现的目标。
我有一个名为$var
my $var = "10 60 20 70 30 60 30 50 50 40 40 30 40 20 50 10 60";
这是一个动态值。目前我预定它只是为了让它易于理解。
然后我拆分$var
my $var1 (split //, $var);
从这一点来说,我不知道我在说什么。
我想像这样排序$var1
30 40 50 10 20 30 40 50 60 10 20 30 40 50 60 70
有没有办法实现这个结果?
我尝试过研究排序,但我发现的结果都没有涵盖这个问题。通常,如果我使用他们的方法,我会得到10 20 30 ......依此类推。
答案 0 :(得分:4)
我能提出的最佳问题是你需要一个列表层次结构 - 每个列表都包含序列中下一个列表中的所有重复项。但是输入中有三次60
,输出中只有两次。
此解决方案的工作原理是将每个值推送到@groups
的第一个尚未包含该值的元素。放置所有项目后,数组将反转,每个子数组按数字顺序排序
use strict;
use warnings;
use List::Util 'any';
my $var = "10 60 20 70 30 60 30 50 50 40 40 30 40 20 50 10 60";
my @var = split ' ', $var;
my @groups;
for my $item ( @var ) {
my $i = 0;
++$i while any { $item == $_ } @{ $groups[$i] };
push @{ $groups[$i] }, $item;
}
@groups = map [ sort { $a <=> $b } @$_ ], reverse @groups;
use Data::Dump;
dd \@groups;
<强>输出强>
[
[30, 40, 50, 60],
[10, 20, 30, 40, 50, 60],
[10, 20, 30, 40, 50, 60, 70],
]
答案 1 :(得分:0)
也许你想在箱子中加入相等的值并对箱子进行分类。
1 1
2 2
3 3
4
5
6
然后,您将从最右边的列到最左边的列读取答案列。尝试更多示例并告诉我们。