gpt4 book ai didi

arrays - 如何在 Perl 中将数组值拆分为新的单独数组?

转载 作者:行者123 更新时间:2023-12-01 15:25:17 24 4
gpt4 key购买 nike

我是学习 perl 的初学者。我在这里要做的是拆分数组 @value 并将其插入到一个新数组中。我的问题是,我不知道如何使我的代码循环运行并获得我想要的结果。

是否有可能使用此方法获得所需的结果,或者是否有任何其他替代/方法来获得相同的结果?

我的代码如下;

my @separated = ();
my @separated1 = ();
my @separated2 = ();
my @separated3 = ();
my $counter = 0;
my @values = "aaa 111 AAA bbb 222 BBB ccc 333 CCC ddd 444 DDD";

foreach (@values) {
my @separated = split(' ', $_);
push @separated1, $separated[0];
push @separated2, $separated[1];
push @separated3, $separated[2];
}
$counter++

print "separated1 = @separated1\n";
print "separated2 = @separated2\n";
print "separated3 = @separated3\n";

我得到的结果;

separated1 = aaa

separated2 = 111

separated3 = AAA

期望的结果;

separated1 = aaa bbb ccc ddd

separated2 = 111 222 333 444

separated3 = AAA BB CCC DD

最佳答案

C 风格的 for 循环适用的罕见场合,每 3 个元素迭代一次

my $string = 'aaa 111 AAA bbb 222 BBB ccc 333 CCC ddd 444 DDD';

my (@sep1, @sep2, @sep3);

my @values = split ' ', $string;

for (my $i=0; $i <= $#values; $i += 3) {
push @sep1, $values[$i];
push @sep2, $values[$i+1];
push @sep3, $values[$i+2];
}

这假设数组确实具有所有三元组,或者最好检查每个元素。

但使用单个结构通常比使用一组并行数组要好得多。例如,使用一个数组,其元素是数组引用

use Data::Dump qw(dd);

my @sep;

for (my $i=0; $i <= $#values; $i += 3) {
for my $j (0..2) {
push @{$sep[$j]}, $values[$i+$j];
}
}

dd \@sep;

可以用更干净的方法避免两次迭代

for my $i (0..$#values) { 
push @{$sep[$i%3]}, $values[$i]
}

它取代了两个循环。

这打印

[  ["aaa", "bbb", "ccc", "ddd"],  [111, 222, 333, 444],  ["AAA", "BBB", "CCC", "DDD"],]

I use Data::Dump to see complex data. An alternative in the core is Data::Dumper.


And then there are many modules with all kinds of utility routines for work with lists.

For example, using part from List::MoreUtils to partition the @values array

my @sep = map { [ @values[@$_] ] } part { $_%3 } 0..$#values;

这会生成与上面相同的带有 arrayrefs 的 @sep

部分 返回一个arrayrefs 列表,每个包含索引,因为它划分了@values 的索引列表。然后在map每个 arrayref 被计算到它的索引列表 (@$_) 中,用于获取 @values 的相应切片;该列表用于通过 [] 制作一个数组引用。所以 map 返回一个 arrayrefs 列表,其中的值根据需要进行分区。

要使用引用,请参阅教程 perlreftut和引用 perlref

关于arrays - 如何在 Perl 中将数组值拆分为新的单独数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56053333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com