सॉर्ट नहीं किया गया है मेरे पास सरणी की एक सरणी है जिसे मैं सॉर्ट करना चाहता हूं। सरणी ए का प्रत्येक तत्व 3 तत्वों वाला एक सरणी है। सरणी एक लगता है कि:मैं पर्ल में सरणी सरणी को सॉर्ट करना चाहता हूं, लेकिन परिणाम
my @A = ([2,3,1], [1,2,3], [1,0,2], [3,1,2], [2,2,4]);
मैं आरोही क्रम में एक तरह से करना चाहते हैं। 2 तत्वों की तुलना करते समय, पहली संख्या का उपयोग किया जाता है। यदि कोई टाई है, तो दूसरी संख्या का उपयोग किया जाता है, और फिर तीसरा नंबर।
मेरा कोड यहां है। मैं 2 तत्वों की तुलना करने के लिए एक फ़ंक्शन 'cmpfunc' का उपयोग करता हूं।
sub cmpfunc {
return ($a->[0] <=> $b->[0]) or
($a->[1] <=> $b->[1]) or
($a->[2] <=> $b->[2]);
}
my @B = sort cmpfunc @A;
print "Result:\n";
for my $element (@B) {
print join(",", @{$element}) . "\n";
}
परिणाम:
1,2,3
1,0,2
2,3,1
2,2,4
3,1,2
परिणाम कुछ हद तक हल कर रहा है, लेकिन सही नहीं। मुझे उम्मीद है कि:
1,0,2
1,2,3
2,2,4
2,3,1
3,1,2
क्या मेरे तुलनात्मक कार्य में कोई त्रुटि है? अजीब बात यह है कि, जब मैं ब्लॉक में तुलना कोड डालता हूं, तो परिणाम सही तरीके से सॉर्ट किया जाता है।
my @C = sort { ($a->[0] <=> $b->[0]) or
($a->[1] <=> $b->[1]) or
($a->[2] <=> $b->[2]) } @A;
संबंधित: http://stackoverflow.com/questions/1512547 – mob