我使用push
函数将值存储在数组中。数组中的第一个值被存储在4个元素而不是第一个元素。例如,当我打印第一个元素$array[1]
时存储值后,它会打印空格/什么都没有,但是当我打印第四个元素$array[4]
时,它会打印第一个值。有关如何在数组开头删除不需要的值的任何建议?如何从Perl数组的开头删除不需要的值?
0
A
回答
2
while (value_meets_shubster_s_definition_of_crap($array[0])) {
shift @array;
}
sub value_meets_shubster_s_definition_of_crap {
my $value = shift;
&helip;
return true or false;
}
…但最好避免将“垃圾”值放在阵列上。
0
如果你想消除所有不需要的值:
@array = grep { not value_meets_shubster_s_definition_of_crap($_) } @array;
然而,正如戴维·多沃德指出,这消除不需要的值从数组中间为好。要在开始摆脱只有值,则可以使用first_index
从List::MoreUtils这可能是比shift
个循环更有效:
#!/usr/bin/perl
use strict;
use warnings;
use List::MoreUtils qw(first_index);
my @array = (0, 1, 0, 2);
my $begin = first_index { not is_unwanted($_) } @array;
@array = @array[ $begin .. $#array ];
print "@array\n";
sub is_unwanted {
my ($v) = @_;
return if $v;
return 1;
}
__END__
输出:
C:Temp> yjk
1 0 2
更新:我预感,似乎一直是错的:
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw(cmpthese);
use List::MoreUtils qw(first_index);
my @array = (0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9);
cmpthese -10, {
'first_index' => \&using_first_index,
'shift' => \&using_shift,
'nop' => \&nop,
};
sub using_first_index {
my @result = @array;
my $begin = first_index { not is_unwanted($_) } @result;
@result = @result[ $begin .. $#result ];
}
sub using_shift {
my @result = @array;
shift @result while is_unwanted($result[0]);
}
sub nop { my @result = @array; }
sub is_unwanted {
my ($v) = @_;
return if $v;
return 1;
}
结果:
Rate first_index shift nop
first_index 75767/s -- -71% -89%
shift 258810/s 242% -- -61%
nop 664021/s 776% 157% --
4
您可以使用'shift'运算符从阵列的前部移除元素。
但我认为这个问题比这个更深,而你却以错误的方式看待它。如果您在数组中存储未知的'不想要的'值,您需要找出发生的地点和原因并防止它发生,而不是绕过这些找到您要查找的内容。
2
你是如何创建数组?使用我的惊人的ESP的力量,我猜测你有一个split
的地方,保持领先的空场地。如果我错了,你必须告诉我们更多关于你在做什么。
这里有一点XY的问题。您在问我们如何实施您已经选择的解决方案,而不是让我们真正解决问题。
相关问题
- 1. 如何从数组中删除不需要的东西?
- 2. 如何从此JSON数组中删除不需要的元素?
- 3. 如何从Perl中的数组中删除随机值?
- 4. 如何从文件的开头删除??
- 5. 如何从sql表中删除不需要的行值?
- 6. 删除数组开头的重复项
- 7. 从数组的尾部删除不需要的元素?
- 8. 如何在删除perl中不需要的行后删除空行?
- 9. 如何删除不需要的字符
- 10. 如何删除不需要的ID?
- 11. 如何删除不需要的favicon
- 12. 如何从多维数组中删除不必要的行?
- 13. 如何从数组中删除空值?
- 14. 如何从Perl数组中删除重复的项目?
- 15. 如何从Perl哈希中删除空的数组/参考?
- 16. 如何从Perl中的字符串开头删除字符序列列表?
- 17. 删除不需要的参数
- 18. 需要在foreach中删除数组中的重复值
- 19. 如何从cookie数组中删除数组中的值?
- 20. Ruby中的散列数组 - 删除不需要的内容
- 21. 需要删除空值
- 22. 如何从接口中删除不需要的功能
- 23. 如何从xslt输出xml中删除不需要的空xmlns
- 24. 如何使用Nokogiri从HTML中删除不需要的标签?
- 25. 如何从jboss日志中删除不需要的行?
- 26. 如何从myapps.developer.ubuntu.com中删除不需要的捕捉包?
- 27. 从数组中删除值
- 28. 从数组中删除值?
- 29. 从数组中删除值
- 30. 如何删除数组中的double值?
你在推动你的阵列?这可能是问题所在。听起来就像你在推动另一个数组而不是推动标量。顺便说一下,第一个元素位于索引0,而不是1。 – jeje 2009-07-10 17:20:28
@ jeje:匹配正则表达式后,我正在推入值。像这样:push(@value,join(“”,$ file =〜/ $ find /)) – shubster 2009-07-10 17:46:23
@shubster好的,所以你在你的数组@value中推入一个数组(显然是5个元素)。 – jeje 2009-07-10 18:02:11