簡體   English   中英

為什么我的排序功能不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM