【发布时间】:2014-08-11 11:48:30
【问题描述】:
我正在尝试将一个数值数组拆分为较小的数组,这样每个较小的数组都不能包含任何不同的数字。
示例:数组(2,2,2,2,2,9,3,3,3,3)应拆分为三个数组(2,2,2,2,2)、(9)和(3,3,3,3)。
这是我尝试过的:
my @arr = (2,2,2,2,2,9,3,3,3,3);
my @result = ();
my $last = -1;
my @newarr = ();
for my $i (0 .. $#arr){
if ( ($i>0 && $arr[$i] != $last) || $i == $#arr ){
push @result, \@newarr;
@newarr = ();
}
$last = $arr[$i];
push @newarr, $arr[$i];
}
首先,这段代码没有给我想要的结果。我认为我的错误是当我将对@newarr 的引用推入@result,但随后我重新初始化@newarr。
其次,没有更优雅的方法可以做到这一点吗?我查看了函数split 和splice,但想不出一个好的解决方案。
【问题讨论】:
-
[[2,5],[9,1],[3,4]]会不会比[[2,2,2,2,2],[9],[3,3,3,3]]更有用? -
当然,这也可以。虽然我可以使用单个数组的长度,所以没关系。
-
哇,我正在投票赞成这个问题并盯着它看 - 我很想将标题编辑成更壮观的东西:谁知道?感谢大家的教育。
标签: arrays perl reference split