【发布时间】:2016-07-26 22:55:08
【问题描述】:
重新排列数组元素以使它们按相应的索引值(减一)排序和放置的最有效方法是什么? $dat 变量是元素的最大数量(在数组中永远不会超过,但可能存在也可能不存在)。
$dat = 14;
my @array = (1, 12, 14, 7, 8, 4)
换句话说:
my @new_array = (1, undef, undef, 4, undef, undef, 7, 8, undef, undef, undef, 12, undef, 14);
***编辑**** 更完整的代码sn-p:
foreach $auth (keys %activity) {
my @value = @{ $activity{$auth} };
@value = uniq @value;
@value = sort @value;
s/^0// for @value;
my $count = scalar(grep $_, @value);
my $dat = max( @value );
@{$activity{$auth}} = @value;
}
【问题讨论】:
-
它是否总是从 1 到
$dat? -
数组中的值可能会不时不同(但永远不会超过 dat)。我尝试了一些“如果”的变体,但它真的很乱。将值移动到新位置后,我似乎一直无法删除现有的数组索引
-
sort应该排在uniq之前 -
@infixed,没办法。最好减少首先排序的元素数量。
-
我习惯了 shell 命令
uniq,它会去除重复的行。如果没有排序,你不会得到重复的行。我想有更灵活的perl函数,未指定问题中使用的函数。坦白说,我还以为列在perlfunc里,和shell命令差不多,其实不然。