我似乎无法正确取消对数组的引用
我不太擅长Perl,但是我需要能够对多维数组进行排序。我一直在使用一些测试代码来尝试更好地理解这个概念,我想我已经接近了,但是我找不到魔术的组合。
我似乎无法做的是取消对数组的引用,并使它们正确打印。除了要引用的数组中的值之外,我似乎几乎了解了我需要了解的所有这些东西。
我从制表符分隔的平面文件中获取数据,因此在我的示例代码中,我通过拆分创建多个数组,然后将它们推入单个数组中,从而模仿了这一点。在实践中,我将遍历文件,在选项卡上拆分并将它们推入数组中。
如果有更好的解决方案,我全神贯注。平面文件中的每一行都是一条记录。我需要首先按日期排序以使最旧的记录排在最前面,然后进行辅助排序以按acct编号对记录进行分组。我已经在网上查看了几个示例,但没有发现任何与我需要模仿的数据兼容的东西。
my @s1 = split(/:/, \'X:Y:Z\');
my @s2 = split(/:/, \'A:B:C\');
my @s3 = split(/:/, \'Q:L:P:0\');
my @s4 = split(/:/, \'U:E:G\');
my @array = ();
push(@array, \\@s1);
push(@array, \\@s2);
push(@array, \\@s3);
push(@array, \\@s4);
print \"@array\\n\";
my @sorted = sort { $a->[0] cmp $b->[0] } @array;
print \"\\n\";
foreach $thingy (@sorted)
{
print @thingy . \"\\n\"; #result: number 0
print $thingy . \"\\n\"; #result: reference
#print ${$thingy} . \"\\n\"; #result: \'Not a scalar reference\' error
print ${@thingy} . \"\\n\"; #result: file name (???)
print @{$thingy} . \"\\n\"; #result: length of the array referenced
}
没有找到相关结果
已邀请:
3 个回复
厦惫
循环中的最后一行是正确取消引用
的那一行。但是,由于您已将ѭ4放在
(字符串串联)运算符的左侧,因此数组在标量上下文中,标量上下文中的数组将求值其大小。说啊:
得到由空格隔开的“ 7”的元素
如果要使用其他分隔符,例如竖线字符。你也可以说
打印完全没有分隔符的元素。
窝头菊
是未声明和未定义的(并且是不必要的)。 使用两个嵌套循环 使用数组引用遍历数组 然后在每个循环中遍历该引用数组中的项目。 像这样
表达式“ 12”将取消引用您的数组引用。然后将其用作数组。 加成: 您可以更换
与
如果排序需要两个条件(主要条件在第一个索引处,辅助条件在第二个索引处),则可以这样写:
擅香
然后您将得到警告:
这意味着没有定义“ 10”。在perl中,
和
算作单独的变量。 创建数组的另一种方法是使用匿名数组,如下所示:
然后,您将不必创建一次性变量。或使用您描述的文件(
是标签):
一种从perlmonks对多列进行排序的方法:
http://www.perlmonks.org/index.pl?node_id=674374 当然,这假定您的字段中为数值。否则使用
。 打印: