假設我有兩個陣列看起來像這樣的元素的數組:排序根據第二陣列
('1', '6', '8', '4', '5')
('a', 'c', 'd', 'f', 'w')
欲第一陣列,和元件的第二陣列中的次序應該改變排序以同樣的方式爲第一陣列,因此兩者的順序爲如下:
('1', '4', '5', '6', '8')
('a', 'f', 'w', 'c', 'd')
如何做到這一點在Perl任何想法?
假設我有兩個陣列看起來像這樣的元素的數組:排序根據第二陣列
('1', '6', '8', '4', '5')
('a', 'c', 'd', 'f', 'w')
欲第一陣列,和元件的第二陣列中的次序應該改變排序以同樣的方式爲第一陣列,因此兩者的順序爲如下:
('1', '4', '5', '6', '8')
('a', 'f', 'w', 'c', 'd')
如何做到這一點在Perl任何想法?
您需要將指數排序到數組中。像這樣
use strict;
use warnings;
my @aa = qw/ 1 6 8 4 5 /;
my @bb = qw/ a c d f w /;
my @idx = sort { $aa[$a] <=> $aa[$b] } 0 .. $#aa;
@aa = @aa[@idx];
@bb = @bb[@idx];
print "@aa\n";
print "@bb\n";
輸出
1 4 5 6 8
a f w c d
鮑羅廷的答案是你的問題一個優秀的和最Perlish的響應。我確實發現數據的結構表明一個散列可能是有用的,所以這裏是一個通過散列和以這種方式排序數據的例子。
use strict;
use warnings;
use List::MoreUtils qw(mesh);
my @aa = qw/ 1 6 8 4 5 /;
my @bb = qw/ a c d f w /;
my %x = mesh @aa, @bb;
print join(" ", sort keys %x), "\n";
print join(" ", @x{sort keys %x}), "\n";
你可以使用散列。使用第一個數組中的值作爲從第二個數組中取得的值的鍵。然後就做一個foreach my $key (sort keys %the_hash) { do stuff }
。如果鍵值不唯一,則使用數組的散列並將值推入散列工作。
#! perl
use strict;
use warnings;
my @key_data = ('1', '6', '8', '4', '5', '4', '5');
my @val_data = ('a', 'c', 'd', 'f', 'w', 'z', 'w');
my %the_hash;
for (my $ii=0; $ii<=$#key_data; $ii++) {
push @{$the_hash{$key_data[$ii]}}, $val_data[$ii];
}
for my $key (sort keys %the_hash) {
print "key $key\n";
foreach my $val (@{$the_hash{$key}}) {
print " $val\n";
}
}
它看起來像我@Abdel家庭作業? :) – 2013-05-06 11:43:35
哈哈,不,這不是作業,我只是簡化了一個實際的問題,我有:) 感謝您的答案,它完美的作品! – Abdel 2013-05-06 11:50:41
什麼是$ a和$ b?什麼是0? – 2018-01-23 09:23:58