我有一个数组说
my @array = (1,4,5,8);
上述数组的每个元素都可能有孩子,也可能没有孩子。
假设1有2,3个孩子,5有10个孩子。
我必须操纵数组,使其变为1,2,3,4,5,10,8
我目前正在做什么
foreach (@$children_indexes){ #myarray
foreach ($self->{RELATION}[$_]->{CHILDREN}){ #find the child of each index
push @$children_indexes, @$_; #I need to change this, as this is pushing at the end
}
}
答案 0 :(得分:3)
或许只需使用map
:
use strict;
use warnings;
my @array = ( 1, 4, 5, 8 );
my %children = (
1 => [ 2, 3 ],
5 => [ 10 ],
);
my @new_array = map { ($_, @{ $children{$_} // [] }) } @array;
print "@new_array\n";
输出:
1 2 3 4 5 10 8
答案 1 :(得分:2)
我猜$self->{RELATION}[$_]->{CHILDREN}
是一个arrayref?
通过索引和向后循环遍历索引数组:
for my $index_index ( reverse 0..$#$children_indexes ) {
if ( $self->{RELATION}[$children_indexes->[$index_index]]{CHILDREN} ) {
splice @$children_indexes, $index_index+1, 0, @{ $self->{RELATION}[$children_indexes->[$index_index]]{CHILDREN} };
}
}
或使用地图:
my @array_with_children = map { $_, @{ $self->{RELATION}[$_]{CHILDREN} || [] } } @$children_indexes;
(假设......-> {CHILDREN}将不存在,或者无论如何都是假的,如果没有孩子的话)
答案 2 :(得分:-1)
不知道为什么他应该使用地图这可以用数组完美地完成。
通过这个,您可以获得循环中当前元素的索引,以查看您要添加的位置:
my @array = qw(A B C E F G);
my $search = "C";
my %index;
@index{@array} = (0..$#array);
my $index = $index{$search}; < - getting the index of the curr element
print $index, "\n";
my @out_array;
my $insert = 'D';
push @out_array,
@array[0..$index],
$insert,
@array[$index+1..$#array];
print @array;
print "\n";
print @out_array;
以下是如何做到这一点的工作示例:)。