কীভাবে 2-উপাদানগুলির তালিকার একটি হ্যাশ তৈরি করা যায়?


9

আমার দ্বি-উপাদানগুলির তালিকার একটি তালিকা রয়েছে, যেমন আপনি উদাহরণস্বরূপ কী পেতে (1..5) Z (20..24)চান, আমি একটি হ্যাশ তৈরি করতে চাই (এই উদাহরণে, আপনি যা পেয়েছেন {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}I আমি এটি "হাত দিয়ে" করতে পারতাম, তবে এটি আইসন নয়) 'খুব মার্জিত না, এবং আমি নিশ্চিত রাকুর এটি করার একটি অদ্ভুত উপায় আছে I আমি যে অবহেলিত বিকল্পটি নিয়ে এসেছি তা হ'ল:

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
এই নির্দিষ্ট উদাহরণের জন্য, এটি সূক্ষ্ম কাজ করে। তবে আমি যদি অন্য কোনও উপায়ে তালিকার তালিকা পেয়ে যাই?
ভোনব্র্যান্ড 21

1
তারপরে দ্বিতীয় বিকল্পটি ব্যবহার করে flatকাজ করা উচিত।
এলিজাবেথ ম্যাটিজসেন 21

1
@ ভনব্র্যান্ড সমতল কৌশল পুরোপুরি সাধারণ is flatযদি স্তরগুলি হয় তবে একটি বহু-স্তরের ডেটা কাঠামোর একাধিক স্তরকে সমতল করবে List। তবে আপনি যদি ইতিমধ্যে নন- Listগুলি প্রবর্তন করেছেন , উদাহরণস্বরূপ এমনটি Arrayনা করার flat আগে ডেটা নির্দিষ্ট করে দেওয়া , তবে flatআর সঠিক সরঞ্জাম হবে না। উদাহরণস্বরূপ, আপনি যদি এটি ব্যবহার করে নির্ধারিত হন my @a = 1..5 Z 20..25;তবে flatএকা কাজটি করবেন না। আমি এটি চ্যাপ্টা হবে my %h = @a[*;*];। আমি এখানে বহু-স্তরের ডেটা সমতল করতে সাবস্ক্রিপ্টগুলি ব্যবহার সম্পর্কে আরও কিছু লিখেছি ।
রায়ফ

@ র‌্যাল্ফ, কী হবে ((1, (1, 2, 3)), (2, (5, 6)), (17, (3, 4, 5, 92, 31))(অর্থাত্ শেষ ফলাফলটি হ্যাশ হিসাবে মান হিসাবে তালিকা থাকবে)?
ভনব্রান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.