วิธีการทำรายการขององค์ประกอบ 2 รายการลงในแฮช


9

ฉันมีรายการขององค์ประกอบสองรายการเช่นสิ่งที่คุณจะได้รับจากการ(1..5) Z (20..24)ที่ฉันต้องการแฮช (ในตัวอย่างนี้สิ่งที่คุณได้รับโดย{1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}ฉันทำได้ "ด้วยมือ" แต่นั่นไม่ใช่ ไม่หรูหราเกินไปและฉันแน่ใจว่า Raku มีวิธีการทำที่แปลก ๆ ทางเลือกที่ไม่เหมาะสมที่ฉันคิดขึ้นมาคือ:

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}

Zmeta-ผู้ประกอบการจะใช้เวลาดำเนินการเป็นส่วนหนึ่งของชื่อของมันและมันเริ่มต้นที่,ทำให้การสร้างรายการโดยค่าเริ่มต้น ถ้าคุณเพิ่มPairคอนสตรัค (อาคาไขมันจุลภาค) แล้วคุณสร้างรายการของPairs Hashซึ่งคุณสามารถกินเป็น

ทางเลือกอื่นflatคือผลลัพธ์ที่ได้สิบZ:

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

1
สำหรับตัวอย่างนี้ใช้งานได้ดี แต่ถ้าฉันได้รับรายการองค์ประกอบสองอย่างอื่นล่ะ
vonbrand

1
จากนั้นตัวเลือกที่สองที่ใช้flatควรทำงานได้
Elizabeth Mattijsen

1
@ vonbrand กลยุทธ์การทำให้แบนเป็นเรื่องทั่วไปโดยสมบูรณ์ flatจะแบนโครงสร้างข้อมูลหลายระดับหลายระดับหากระดับเป็นLists แต่ถ้าคุณได้แนะนำ non- Lists แล้วเช่นการกำหนดข้อมูลให้กับArrayโดยไม่ใช้flat ก่อนทำเช่นนั้นflatจะไม่เป็นเครื่องมือที่เหมาะสมอีกต่อไป ตัวอย่างเช่นหากคุณมอบหมายให้ใช้งานโดยลำพังmy @a = 1..5 Z 20..25;แล้วflatจะไม่ทำงาน my %h = @a[*;*];ฉันจะแผ่มันเช่นนี้ ผมเคยเขียนอีกเล็กน้อยเกี่ยวกับการใช้ห้อยให้เรียบข้อมูลหลายระดับที่นี่
raiph

@ รัลเกี่ยวกับอะไร((1, (1, 2, 3)), (2, (5, 6)), (17, (3, 4, 5, 92, 31))(เช่นผลลัพธ์ที่ได้จะเป็นแฮชที่มีรายการเป็นค่า)
vonbrand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.