2013-10-08 53 views
0

我有一個文件,我已經讀入一個數組,有多個列,我想按第二列進行數字排序。我查了許多類似的問題,並試圖直接整合給出的答案。爲什麼我的排序功能不起作用

這裏是我使用的基本代碼:

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; 

這給了我一個錯誤不能使用字符串(「狗」)作爲數組引用而嚴格的導通。我嘗試了其他一些其他文件,數組的其他例子,但總是得到這個消息,所以我認爲我的代碼必然存在內在的錯誤。

任何有經驗的人都會對我做錯的事情有所瞭解,並允許我按編號列進行排序,同時仍保持行結構。

回答

4

你的任務不創建多維數組:

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; 

請注意,您正在打印對數組的引用。輸出將是一個數據結構看起來像什麼too​​lic在他的回答顯示:

$VAR1 = [ 
      [ ... 

注意括號,再次表示數組引用。

6

你有一個平坦的數組,但你想要一個陣列的陣列:

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' 
      ] 
     ]; 
相關問題