2013-05-06 6 views
6

मान लीजिए मैं दो सरणियों कि इस तरह दिखना है के तत्वों के अनुसार एक सरणी:तरह एक दूसरी सरणी

('1', '6', '8', '4', '5') 
('a', 'c', 'd', 'f', 'w') 

मैं पहली सरणी, और दूसरा सरणी में तत्वों के क्रम में बदलना चाहिए क्रमबद्ध करना चाहते हैं

('1', '4', '5', '6', '8') 
('a', 'f', 'w', 'c', 'd') 

कैसे करना है कि पर्ल में की कोई भी विचार: पहली सरणी के रूप में एक ही तरह से है, तो दो का क्रम इस प्रकार हो जाता है?

उत्तर

10

आपको सूचकांक को सरणी में सॉर्ट करने की आवश्यकता है। इस

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 
+1

यह मुझे @Abdel होमवर्क की तरह दिखता है? :) –

+0

हाहा, नहीं, यह होमवर्क नहीं है, मैंने बस एक वास्तविक समस्या को सरल बनाया है :) उत्तर के लिए धन्यवाद, यह पूरी तरह से काम करता है! – Abdel

+0

$ ए और $ बी क्या है? 0 क्या है –

2

Borodin का जवाब अपने प्रश्न के लिए एक उत्कृष्ट और सबसे 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"; 
3

आप एक हैश का उपयोग कर सकते हैं। दूसरी सरणी से ली गई मानों के लिए कुंजी के रूप में पहले सरणी से मानों का उपयोग करें। फिर बस 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"; 
    } 
} 
संबंधित मुद्दे