2011-05-25 11 views
5

क्या हैश में डुप्लिकेट कुंजी या मान हो सकते हैं?क्या हैश में डुप्लिकेट कुंजी या मान हैं

+0

आप हैश तालिका मतलब है हो सकता है? –

+1

ओह को यह एहसास नहीं हुआ कि हश सहयोगी सरणी (अजीब) के लिए पर्ल का नाम है। –

+1

@ जेक टी।, पर्ल एसोसिएटिव एरे हैंश टेबल – ikegami

उत्तर

13

इसमें डुप्लिकेट मान हो सकते हैं लेकिन कुंजी नहीं।

+2

मैं आपके 14.5k प्रतिनिधि हाहा के आधार पर एक असाइनमेंट सबमिट कर रहा हूं, विधिवत उद्धृत, लेकिन अगर हम शायद थोड़ी देर में मेरे व्याख्याता से सुन रहे होंगे ... – lol

5

एक "% हैश"

तब के बारे में बात मानते हुए:

  • डुप्लिकेट चाबी अनुमति नहीं है।
  • डुप्लिकेट मूल्यों की अनुमति है।

इसका कारण यह है कि यह एक विशेष मूल्य जहां मूल्य लुक-अप में कोई भूमिका निभाता है और इस प्रकार अन्य मूल्यों पर स्वतंत्र है करने के लिए एक विशेष कुंजी की मैपिंग है के बारे में तर्क करने में आसान है।

9

दोनों हैंश और सरणी के लिए, केवल एक स्केलर किसी दिए गए कुंजी पर संग्रहीत किया जा सकता है। पर ("कुंजी अद्वितीय हैं।") अगर वे नहीं थे, तो आप नहीं कर सका

$h{a} = 1; 
$h{a} = 2; 
$val = $h{a}; # 2 

$a[4] = 1; 
$a[4] = 2; 
$val = $a[4]; # 2 

आप एक कुंजी के साथ एक से अधिक मान संबद्ध करने के लिए करना चाहता था, तो आप एक सरणी (या हैश) के लिए एक संदर्भ बन सकता था वह कुंजी, और उस सरणी (या हैश) में मान जोड़ें।

for my $n (4,5,6,10) { 
    if ($n % 2) { 
     push @{ $nums{odd} }, $n; 
    } else { 
     push @{ $nums{even} }, $n; 
    } 
} 

say join ', ', @{ $nums{even} }; 

इस पर और अधिक के लिए perllol देखें।

मूल्यों के लिए, कई तत्वों में दोनों हैंश और सरणी में समान मूल्य हो सकता है।

$counts{a} = 3; 
$counts{b} = 3; 

$counts[5] = 3; 
$counts[6] = 3; 
1

आप सीपीएएन से Hash::MultiKey मॉड्यूल का उपयोग करने का प्रयास कर सकते हैं।

(मैं डाटा :: डम्पर इस्तेमाल किया दिखाने के लिए कैसे हैश ठीक है लगता है - इसे यहाँ आवश्यक नहीं है)

use Data::Dumper; 
use Hash::MultiKey; 

tie my %multi_hash, 'Hash::MultiKey'; 

$multi_hash{['foo', 'foo', 'baz']} = "some_data"; 

for (keys %multi_hash) { 
    print @$_,"\n"; 
}; 

print Dumper\%multi_hash; 

और उत्पादन हो shoud():

foofoobaz 
$VAR1 = { 
      'ARRAY(0x98b6978)' => 'some_data' 
     }; 

तो तकनीकी तौर पर हैश :: मल्टीकी आपको एक हैश कुंजी के रूप में संदर्भ बनाने देता है।

1

कृपया इस कोड को आज़माएं और चलाएं, यह त्रुटियों के बिना निष्पादित करता है। मुझे उम्मीद है कि आप यही पूछ रहे थे!

#!/usr/bin/perl 

use strict; 
use warnings; 

my %hash = ('a' => 1, 'a' => 2, 'b' => 4); 

print values %hash, "\n\n"; 
print keys %hash, "\n\n"; 
0

हाँ एक हैश डुप्लिकेट चाबी हो सकता है के रूप में मैं नीचे प्रदर्शित ...

कुंजी उदाहरण: जन्मतिथि | LastNameFirst4Chars | FirstNameInitial | IncNbr "1959/12/19 | विल | कश्मीर | 1"। .. "1 9 5 9-12-19 | विल | के | 74"।
नोट: यह रिकॉर्ड देखो अप के लिए एक उपयोगी कुंजी अगर किसी को अपनी सामाजिक सुरक्षा Nbr याद नहीं था

#-- CODE SNIPPET: 
    @Offsets=();  #-- we will build an array of Flat File record "byte offsets" to random access 
        #-- for all records matching this ALT KEY with DUPS  
    for ($i=1; $i<=99; $i++) { 
     $KEY=$BirthDate . "|" . $LastNameFirst4Chars . "|" . $FirstNameInitial . "|" . $i; 
     if (exists $Hash{$KEY}) { 
      push @Offsets, $Hash{$KEY}; #-- add another hash VALUE to the end of the array 
     } 
    } 
+0

यह क्या दिखाता है? आपके कोड के चलने के बाद, 'ऑफसेट्स' और '% हैश 'दोनों अपरिवर्तित हैं (यानी अभी भी खाली)। कोड '_ कुंजी' के लिए 99 _different_ मान उत्पन्न करता है, जैसे 'blabla | 1',' blabla | 2', ... 'blabla | 99'। – PerlDuck

+0

ठीक है, लेकिन पर्ल में मानक हैश निश्चित रूप से डुप्लिकेट कुंजी नहीं हो सकता है। आपके उदाहरण की चाबियां अलग-अलग हैं। '" $ जन्मदिन | ... | 1 "' '$ जन्मदिन से अलग है | ... | 2" ', है ना? तो कुंजी _not_ डुप्लिकेट हैं। – PerlDuck

+0

पर्लडक, अनुक्रम संख्या कुंजी अद्वितीय बनाती है। अगर मेरे पास अनोखा प्राथमिक कुंजी है तो सोशल सिक्योरिटी नंबर कहें। और मैं अपने डेटाबेस में एक रिकॉर्ड का उपयोग करना चाहता हूं, लेकिन एसएसएन को याद नहीं किया जाता है, तो मैं एक एएलटी कुंजी डब्ल्यू/डीयूपीएस का उपयोग कर सकता हूं जैसे: "$ जन्मदिन | $ LastNameFirst4Chars | $ FirstNameInitial | SeqNbr"। "1 9 5 9-12-19 | विल | के | 1 ..." 1 9 5 9-12-19 | विल | के | 99 "। कुंजी में सभी डेटा अनुक्रम nbr को छोड़कर डुप्लिकेट किया गया है। इस प्रकार आप हैश को सक्षम करते हैं डुप्लिकेट कुंजी है। –

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