我正在尝试将数组拆分为两个不同的数组。
第一个是@product
,
第二个是@digit
。
@products = qw/Diapers 759230 TrashBags 272616 ToiletPaper 267112 Condoms 987456 Pencils 231948 Pillows 898923 Crayons 123997 Sheets 231223 Paper 235442 Cups 124409 Napkins 029399/;
打印@product的结果将是: DiapersTrashBagsToiletPaperCondomsPencilsPillowsCrayonsSheetsPaperCupsNapkins ...
答案 0 :(得分:5)
假设以下两个例子都有以下内容:
use strict;
use warnings;
my @products = qw/Diapers 759230 TrashBags 272616 ToiletPaper 267112 Condoms 987456 Pencils 231948 Pillows 898923 Crayons 123997 Sheets 231223 Paper 235442 Cups 124409 Napkins 029399/;
如果您不关心订单,请利用哈希的属性:
my %hash = @products;
my @digits = values(%hash);
my @product = keys(%hash);
指定产品的名称和编号在@product
和@digits
中都是相同的索引,但@product
/ @digits
中产品的顺序将是与@products
中的顺序不同。
如果希望顺序相同,请对偶数和奇数数组进行切片:
my @digits = @products[ grep { ! ($_ % 2) } 0 .. $#products ];
my @product = @products[ grep { $_ % 2 } 0 .. $#products ];
答案 1 :(得分:2)
我认为@products
包含每个产品的2
值。要迭代产品,您可以使用必备List :: MoreUtils模块中的natatime
。
use List::MoreUtils qw( natatime );
my $iter = natatime(2, @products);
while (my @product = $iter->()) {
...
}
因此,要回答您的问题,您可以使用以下内容:
use List::MoreUtils qw( natatime );
my (@product_names, @product_ids);
my $iter = natatime(2, @products);
while (my @product = $iter->()) {
push @product_names, $product[0];
push @product_ids, $product[1];
}
答案 2 :(得分:1)
将@products
视为对的列表似乎最可靠,因此我会根据@products
中的索引拆分值。
my (@diag, @product);
for my $i (0..$#products){
if($i & 1 == 1){
push(@diag,$products[$i]);
}else {
push(@product,$products[$i]);
}
}
print "\@diag:".join(";",@diag)."\n";
print "\@product:".join(";",@product)."\n";
结果是:
@diag:759230;272616;267112;987456;231948;898923;123997;231223;235442;124409;029399
@product:Diapers;TrashBags;ToiletPaper;Condoms;Pencils;Pillows;Crayons;Sheets;Paper;Cups;Napkins
答案 3 :(得分:1)
您可以使用for,
迭代数组foreach (@products){
if(/\d/){
push(@digits,$_);
}else{
push(@product,$_);
}
}
或者,您可以从数组中grep
my(@product) = grep { !/\d/ } @products;
my(@digits) = grep { /\d/ } @products;
答案 4 :(得分:0)
根据其索引是偶数还是奇数,将push
每个值简单地放到一个或另一个数组上
use strict;
use warnings 'all';
my @products = qw/
Diapers 759230
TrashBags 272616
ToiletPaper 267112
Condoms 987456
Pencils 231948
Pillows 898923
Crayons 123997
Sheets 231223
Paper 235442
Cups 124409
Napkins 029399
/;
my ( @product, @digits );
push @{$_ % 2 ? \@digits : \@product}, $products[$_] for 0 .. $#products;
print "@product\n\n";
print "@digits\n\n";
Diapers TrashBags ToiletPaper Condoms Pencils Pillows Crayons Sheets Paper Cups Napkins
759230 272616 267112 987456 231948 898923 123997 231223 235442 124409 029399