1
How to sort a list with a given order?Perl - 如何按給定順序對數組值進行排序?
我們已經討論瞭如何使用map和$ _根據給定順序對列表進行排序。今天我有另一個問題。
我有同樣的排序依據:
my @orderby = ('car', 'boat', 'chicken', 'cat', 'dog', 'mouse');
# or if it's better to the code:
my %orderby = ('car' => 0,
'boat' => 1,
'chicken' => 2,
'cat' => 3,
'dog' => 4,
'mouse' => 5);
現在我已經被排序依據被下令需要滿足以下條件:
print Dumper \%toys;
$VAR = {
'animals' => [
[
'feather', 'cluck-2', 'chicken', 'white'
],
[
'bald', 'bark', 'dog', 'black stripes'
],
[
'feather', 'cluck-2', 'chicken', 'white'
]
],
'notanima' => [
[
'paited', 'motor', 'boat', 'red'
],
[
'painted', 'motor', 'car', 'blue on top'
]
]
};
的代碼需要使用3列基於排序依據排序。你需要爲動物和notanima使用相同的裝飾。 的重新排列後,$ VAR將是:
$VAR = {
'animals' => [
[
'feather', 'cluck-2', 'chicken', 'white'
],
[
'feather', 'cluck-2', 'chicken', 'white'
],
[
'bald', 'bark', 'dog', 'black stripes'
]
],
'notanima' => [
[
'painted', 'motor', 'car', 'blue on top'
],
[
'paited', 'motor', 'boat', 'red'
]
]
};
order %toys{key} by orderby;
我曾試圖改變這種@ikegami提供
my %counts; ++$counts{$_} for @list;
my @sorted = map { ($_) x ($counts{$_}||0) } @orderby;
地圖解決方案,但我沒有成功。 你們有什麼想法,我怎麼能實現這個目標?
Thx提前!
更新!
我試圖用從池上的建議,我已經做到了這一點:
# that first foreach will give one ARRAY for animals and one ARRAY for notanima
foreach my $key (keys %toys)
{
# that one will give me access to the ARRAY referenced by the $key.
foreach my $toy_ref ($toys{$key})
{
my %orderby = map {$orderby[$_] => $_} 0..$#orderby;
my @sorted = sort { $orderby{$a} <=> $orderby{$b} } @{$toy_ref};
# my @sorted = sort { $orderby{$a} <=> $orderby{$b} } $toy_ref;
print Dumper @sorted;
}
}
首先,這給了我警告:
Use of uninitialized value in numeric comparison (<=>) at....
我的排序爲notanima(的結果會忽視動物,所以後也不會那麼大):
基於排序依據$VAR1 = [
'paited', 'motor', 'boat', 'red'
];
$VAR2 = [
'painted', 'motor', 'car', 'blue on top'
];
,打印順序必須是:
$VAR1 = [
'painted', 'motor', 'car', 'blue on top'
];
$VAR2 = [
'paited', 'motor', 'boat', 'red'
];
汽車需要先來。 我做錯了什麼?
[Perl:如何按給定順序對列表進行排序?](http:// stackoverflow。com/questions/14730683/perl-how-to-sort-a-list-with-a-given-order) –
如果上一個答案不起作用,請不要再提問相同的問題;更新您的舊問題並取消標記答案。 –
爲什麼你使用標籤爲「人頭屎」的解決方案? – ikegami