[英]Why is my sort function not working
我有一個已讀入數組的文件,該文件具有多列,並且我想按第二列按數字排序。 我查找了無數類似的問題,並試圖直接結合給出的答案。
這是我正在使用的基本代碼:
use strict;
use warnings;
use diagnostics;
my @arrayed = (
"\ndog", "10", "barks",
"\ncat", "20", "meows",
"\nfish", "5", "plop",
"\nant", "30", "walk",
);
print "@arrayed";
print "\n";
my @sortedarray = sort { $a->[1] <=> $b->[1] } @arrayed;
print "@sortedarray";
exit;
這給我一個錯誤,當打開strict時,不能使用字符串(“ dog”)作為數組引用。 我嘗試了其他文件,數組的其他一些示例,但始終會收到此消息,因此我認為我的代碼肯定存在某些本質問題。
任何有經驗的人都可以對我在做錯的事情有所了解,並允許我按編號的列進行排序,同時仍保持行結構。
您有一個平面數組,但是想要一個數組數組:
use strict;
use warnings;
use diagnostics;
use Data::Dumper;
my @arrayed = (
["dog", "10", "barks"],
["cat", "20", "meows"],
["fish", "5", "plop"],
["ant", "30", "walk"],
);
print Dumper(\@arrayed);
my @sortedarray = sort { $a->[1] <=> $b->[1] } @arrayed;
print Dumper(\@sortedarray);
__END__
$VAR1 = [
[
'dog',
'10',
'barks'
],
[
'cat',
'20',
'meows'
],
[
'fish',
'5',
'plop'
],
[
'ant',
'30',
'walk'
]
];
$VAR1 = [
[
'fish',
5,
'plop'
],
[
'dog',
10,
'barks'
],
[
'cat',
20,
'meows'
],
[
'ant',
30,
'walk'
]
];
您的分配不會創建多維數組:
my @arrayed = (
"\ndog", "10", "barks",
"\ncat", "20", "meows",
"\nfish", "5", "plop",
"\nant", "30", "walk",
);
您將需要在這些括號內使用數組引用:
my @arrayed = (
[ "\ndog", "10", "barks" ],
[ "\ncat", "20", "meows" ],
[ "\nfish", "5", "plop" ],
[ "\nant", "30", "walk" ]
);
方括號[ ... ]
創建匿名數組引用,然后可以將其存儲在數組中。
調試時要了解的最重要的事情之一就是數據的外觀。 做類似你所做的事情
print "@arrayed";
並不是很有用,因為它只會顯示由空格分隔的元素列表。 另外,如果使用多維數組完成此操作,則將獲得如下輸出:
ARRAY(0x7fd658) ARRAY(0x7fd7f0)
字符串化后的數組引用是什么樣的。 相反,您應該使用Data::Dumper
模塊:
use Data::Dumper;
print Dumper \@arrayed;
請注意,您正在打印對該數組的引用。 輸出將是一個數據結構,看起來像toolic在他的答案中所示:
$VAR1 = [
[ ...
請注意,方括號再次表示數組引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.