2-तत्व की सूची को हैश में कैसे बनाएं?


9

मेरे पास दो-तत्व सूचियों की एक सूची है, जैसे आपको उदाहरण के लिए क्या मिलेगा (1..5) Z (20..24), जिसे मैं एक हैश में बनाना चाहता हूं (इस उदाहरण में, आपको क्या मिलता है {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}। मैं इसे "हाथ से" कर सकता था, लेकिन वह नहीं है। 'बहुत सुंदर है, और मुझे यकीन है कि राकू के पास इसे करने का एक मुहावरेदार तरीका है। मैं जिस असीम विकल्प के साथ आया हूं:

my @a = (1..5) Z (20..24);
my %a;
for @a -> @x {
   %a{@x[0]} = @x[1];

जवाबों:


12
my %h = (1..5) Z=> (20..24);
say %h;  # {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 => 24}

Zमेटा-ऑपरेटर अपने नाम के हिस्से के रूप में एक ऑपरेटर लेता है, और करने के लिए यह चूक ,है, इस प्रकार डिफ़ॉल्ट रूप से सूचियां बनाने के। यदि आप Pairकंस्ट्रक्टर (उर्फ वसा-कॉमा) जोड़ते हैं , तो आप Pairएस की एक सूची बनाते हैं , जिसे आप ए में फीड कर सकते हैं Hash

एक वैकल्पिक समाधान flatका परिणाम दस तक होगा Z:

my %h = flat (1..5) Z (20..24);

1
इस विशेष उदाहरण के लिए, यह ठीक काम करता है। लेकिन क्या होगा अगर मुझे किसी और तरह से दो-तत्व की सूची मिली है?
वॉनब्रांड

1
तब उपयोग करने वाला दूसरा विकल्प flatकाम करना चाहिए।
एलिजाबेथ मैटीजसेन

1
@vonbrand सपाट रणनीति पूरी तरह से सामान्य है। flatयदि स्तर हैं, तो एक बहु-स्तरीय डेटा संरचना के कई स्तरों को समतल कर देगा List। लेकिन अगर आपने पहले से ही गैर- Listएस शुरू कर दिया है , उदाहरण के लिए ऐसा Arrayकरने flat से पहले उपयोग किए बिना डेटा असाइन करना , तो flatअब सही उपकरण नहीं होगा। उदाहरण के लिए, यदि आपने इसे उपयोग कर सौंपा है my @a = 1..5 Z 20..25;तो flatअकेले काम नहीं करेगा। मैं इसे इस तरह समतल करूंगा my %h = @a[*;*];। मैंने यहां बहु-स्तरीय डेटा को समतल करने के लिए सदस्यता का उपयोग करने के बारे में थोड़ा और लिखा है
राही

@ralph, क्या होगा ((1, (1, 2, 3)), (2, (5, 6)), (17, (3, 4, 5, 92, 31))(यानी, अंतिम परिणाम मूल्यों के रूप में सूचियों के साथ एक हैश होगा)?
वॉनब्रांड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.