Regex 如何使用perl从数组中提取子数组
假设我有这个数组。(Perl) 如何提取子阵列?另外,如何确定每个子阵列的索引? 提前谢谢 首先,在Perl中,列表总是扁平化的。多维列表不存在。这意味着Regex 如何使用perl从数组中提取子数组,regex,perl,Regex,Perl,假设我有这个数组。(Perl) 如何提取子阵列?另外,如何确定每个子阵列的索引? 提前谢谢 首先,在Perl中,列表总是扁平化的。多维列表不存在。这意味着 ( 1, 2, 3, (4, 5) ) 与 ( 1, 2, 3, 4, 5 ) 或 它们都被压扁了 如何使用子数组的大小提取子数组,或确定每个元素末尾的索引 你说你知道每个元素的大小。在这种情况下,您有几个选择 # index 0 1 2 3 4 5 6 7 8 9 10 11 1
( 1, 2, 3, (4, 5) )
与
( 1, 2, 3, 4, 5 )
或
它们都被压扁了
如何使用子数组的大小提取子数组,或确定每个元素末尾的索引
你说你知道每个元素的大小。在这种情况下,您有几个选择
# index 0 1 2 3 4 5 6 7 8 9 10 11 12
my @long_array = ( qw(a b c), qw(a 2 3 4 5 j), qw(l), qw(t x 51));
my @abc = @long_array[0 .. 2];
my @a2345j = @long_array[3 .. 8];
my $l = $long_array[9];
my @tx51 = @long_array[10, 11, 12];
这主要使用数组切片,这就是为什么@long_array[0..2]
的sigil是@
,而不是$
,因为表达式返回的是列表而不是标量
另一种方法是使用,但这会改变初始数组
无论哪种情况,您都必须知道每个子列表的开始和长度。因为没有子列表,所以这是获取每段数据的唯一方法。如果你不知道起始索引和长度,那你就倒霉了。括号只会影响优先级。Perl将把您认为是数组的数组展平为单个数组。为了模拟一个或多个数组,您需要实际创建一个数组引用([]、[]、[]),如下所示
use strict;
use warnings;
my @arr= (['a','b','c'],['a',2,3,4,5,'j'],['l'],['t','x',51]);
print $arr[0]->[1]; #prints b
print $arr[1]->[2]; #prints 3
#prints all elements
foreach my $arrRef(@arr) {
foreach my $element(@$arrRef) {
print "$element\n";
}
}
有些方法
@var_ref_array = (
[ "a", "b", "c" ],
[ "d", "e", "f" ],
[ "g"] );
for my $i ( 0 .. $#{var_ref_array})
{
for my $j ( 0 .. $#{var_ref_array->[$i]})
{
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for(my $i=0; $i<$#{var_ref_array}+1; $i++){
for(my $j=0; $j<$#{var_ref_array->[$i]}+1; $j++){
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for(my $i=0; $i<scalar @var_ref_array; $i++){
for(my $j=0; $j<scalar @{$var_ref_array[$i]}; $j++){
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for(my $i=0; $i<scalar @var_ref_array; $i++){
for(my $j=0; $j<scalar @{var_ref_array->[$i]}; $j++){
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for my $i ( 0 .. @var_ref_array)
{
for my $j ( 0 .. @{$var_ref_array[$i]})
{
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for my $i ( 0 .. @var_ref_array)
{
for my $j ( 0 .. @{var_ref_array->[$i]})
{
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
foreach my $array_(@var_ref_array){
foreach my $element(@$array_){
print "$element";
}
}
@var\u ref\u数组=(
[“a”、“b”、“c”],
[“d”、“e”、“f”],
[“g”]);
对于我的$i(0..$#{var_ref_array})
{
对于我的$j(0..$#{var_ref_array->[$i]})
{
打印“$var_ref_数组[$i][$j]”;
}
}
printf“\n”;
for(my$i=0;$i您编写的数组与(a、b、c、a、2、3、4、5、j、l、t、x、51)相同。这不是构建多维数组的方式,您必须使用引用。此外,您的代码片段会出错,因此我猜您没有使用strict
或warnings
您应该始终使用它们。我要感谢大家利用您的时间来帮助我@arr=(['a','b','c'),['a',2,3,4,5,'j'],['l'],['t','x',51])#为($i=0;$i)打印所有元素,感谢您花时间帮助我,我得到了我想要的,我将发布解决方案
use strict;
use warnings;
my @arr= (['a','b','c'],['a',2,3,4,5,'j'],['l'],['t','x',51]);
print $arr[0]->[1]; #prints b
print $arr[1]->[2]; #prints 3
#prints all elements
foreach my $arrRef(@arr) {
foreach my $element(@$arrRef) {
print "$element\n";
}
}
@var_ref_array = (
[ "a", "b", "c" ],
[ "d", "e", "f" ],
[ "g"] );
for my $i ( 0 .. $#{var_ref_array})
{
for my $j ( 0 .. $#{var_ref_array->[$i]})
{
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for(my $i=0; $i<$#{var_ref_array}+1; $i++){
for(my $j=0; $j<$#{var_ref_array->[$i]}+1; $j++){
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for(my $i=0; $i<scalar @var_ref_array; $i++){
for(my $j=0; $j<scalar @{$var_ref_array[$i]}; $j++){
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for(my $i=0; $i<scalar @var_ref_array; $i++){
for(my $j=0; $j<scalar @{var_ref_array->[$i]}; $j++){
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for my $i ( 0 .. @var_ref_array)
{
for my $j ( 0 .. @{$var_ref_array[$i]})
{
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
for my $i ( 0 .. @var_ref_array)
{
for my $j ( 0 .. @{var_ref_array->[$i]})
{
print "$var_ref_array[$i][$j]";
}
}
printf "\n";
foreach my $array_(@var_ref_array){
foreach my $element(@$array_){
print "$element";
}
}