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}

Z메타 연산자는 이름의 일부로 연산자를 취하고,에 기본값 ,따라서 기본적으로 목록 작성. Pair생성자 (일명 fat-comma) 를 추가하면 의 목록을 작성하여에 Pair피드 할 수 있습니다 Hash.

다른 해결책은 다음과 flat같은 결과 를 10으로 만드는 것 입니다 Z.

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

1
이 특정 예에서는 잘 작동합니다. 그러나 두 가지 요소로 구성된 목록을 다른 방법으로 가져 오면 어떻게됩니까?
vonbrand

1
그런 다음 사용하는 두 번째 옵션 flat이 작동합니다.
Elizabeth Mattijsen

1
@vonbrand 병합 전략은 완전히 일반적입니다. flat레벨이 Lists 인 경우 다중 레벨 데이터 구조의 여러 레벨을 병합합니다 . 이미 비 도입했습니다하지만 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))(즉, 최종 결과는 값을 목록으로하는 해시입니다)?
폰 브랜드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.