Làm thế nào để tạo một danh sách các danh sách 2 yếu tố thành một hàm băm?


9

Tôi có một danh sách các danh sách hai yếu tố, như những gì bạn nhận được ví dụ bằng cách (1..5) Z (20..24)tôi muốn tạo thành một hàm băm (trong ví dụ này, những gì bạn nhận được {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}. Tôi có thể thực hiện "bằng tay", nhưng đó không phải là Tôi quá tao nhã và tôi chắc chắn Raku có một cách làm việc bình thường. Sự thay thế không phù hợp mà tôi nghĩ ra là:

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

Câu trả lời:


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

Các Zmeta-nhà điều hành có một nhà điều hành như một phần của tên của nó, và mặc định nó để ,, do đó tạo danh sách theo mặc định. Nếu bạn thêm hàm Pairtạo (còn gọi là fat-dấu phẩy), thì bạn tạo một danh sách Pairs, mà bạn có thể đưa vào Hash.

Một giải pháp thay thế sẽ là flatmười kết quả của Z:

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

1
Đối với ví dụ cụ thể này, điều này hoạt động tốt. Nhưng nếu tôi có danh sách các yếu tố hai yếu tố khác thì sao?
vonbrand

1
Sau đó, tùy chọn thứ hai sử dụng flatnên hoạt động.
Elizabeth Mattijsen

1
@vonbrand Chiến lược làm phẳng hoàn toàn chung chung. flatsẽ làm phẳng nhiều cấp của cấu trúc dữ liệu đa cấp nếu các cấp là Lists. Nhưng nếu bạn đã giới thiệu không phải List, ví dụ: gán dữ liệu cho một Arraymà không sử dụng flat trước khi thực hiện, thì đó flatsẽ không còn là công cụ phù hợp. Ví dụ: nếu bạn đã chỉ định sử dụng my @a = 1..5 Z 20..25;thì flatmột mình sẽ không thực hiện công việc. Tôi sẽ làm phẳng nó như thế này my %h = @a[*;*];. Tôi đã viết thêm một chút về việc sử dụng các mục đăng ký để làm phẳng dữ liệu đa cấp ở đây .
49

@ralph, còn về ((1, (1, 2, 3)), (2, (5, 6)), (17, (3, 4, 5, 92, 31))(nghĩa là kết quả cuối cùng sẽ là hàm băm với danh sách là giá trị) thì sao?
vonbrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.