2013-04-09 7 views
10

में डुप्लिकेट मानों को धक्का देने से कैसे बचें मुझे इनपुट से एक सरणी में अद्वितीय तत्व जोड़ने की आवश्यकता है जिसमें कई डुप्लिकेट मान हैं।एक पर्ल सरणी

मैं डुप्लिकेट मानों को एक पर्ल सरणी में धक्का देने से कैसे बचूं?

+0

आप एक सेट की धारणा का उपयोग कर सकते है: http://stackoverflow.com/questions/3700037/how-can-i- प्रतिनिधित्व-सेट-इन-पर्ल – akonsu

+0

यदि आप सीपीएएन का विरोध नहीं कर रहे हैं तो हमेशा 'सूची :: MoreUtils' uniq फ़ंक्शन होता है। – squiguy

उत्तर

12

आप बस इस तरह हैश उपयोग करने की आवश्यकता:

my %hash; 
$hash{$key} = $value; # you can use 1 as $value 
... 

यह स्वचालित रूप से डुप्लिकेट चाबी ऊपर लिख देगा।

जब आप इसे प्रिंट करने की जरूरत है, बस का उपयोग करें:

foreach my $key (keys %hash) { 
    # do something with $key 
} 

आप, कुंजी सॉर्ट करने के लिए यह जाँच करता है

foreach my $key (sort keys %hash) ... 
+2

वाह, यह नया रिकॉर्ड होना चाहिए: जवाब 4 साल बाद स्वीकार किया गया :) – mvp

+1

उसे यह सुनिश्चित करना था कि यह काम करता है। ; पी –

12
push(@yourarray, $yourvalue) unless grep{$_ == $yourvalue} @yourarray; 

का उपयोग करता है, तो मान सरणी से पहले में मौजूद है की जरूरत है धक्का। यदि मान मौजूद नहीं है तो इसे धक्का दिया जाएगा।

यदि मान संख्यात्मक नहीं है तो आपको == के बजाय eq का उपयोग करना चाहिए।

+1

यह समाधान बहुत अक्षम हो जाता है क्योंकि सरणी बड़ी हो जाती है - हैश विधि को प्राथमिकता दी जानी चाहिए। –

3

हम कर सकते हैं कम से कम पर्ल संस्करण ~~ का उपयोग करके 5.10.1

use v5.10.1; 
use strict; 
use warnings; 

my @ARRAY1 = qw/This is array of backup /; 
my @ARRAY2; 


my $value = "version.xml" ; 


sub CheckPush($$) 
{ 

my $val = shift (@_); 
my $array_ref= shift (@_); 

    unless ($val ~~ @$array_ref) 
    { 
     print "$val is going to push to array \n"; 
     push(@$array_ref,$val); 
    } 
return (@$array_ref); 
} 

@ARRAY1 = CheckPush($value,\@ARRAY1); 
print "out \n"; 
foreach $_ (@ARRAY1) { 
print "$_ \n"; 
} 

@ARRAY2 = CheckPush ($value,\@ARRAY2); 
print "out2 \n"; 
foreach $_ (@ARRAY2) { 
print "$_ \n"; 
} 
+0

संक्षेप में: 'पुश (@yourarray, $ yourvalue) जब तक आपके $ ~~ @yourarray; '' – Codr

संबंधित मुद्दे