Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Array#zip 메서드

차이점을 찾기 위해 요소별로 두 배열을 비교한다고 가정해 보겠습니다.

또는 모든 인덱스에서 가장 큰 수를 찾거나 키 목록과 값 목록을 병합하여 해시를 만들고 싶을 수도 있습니다...

...이를 수행하는 "어려운 방법"은 다음과 같습니다.

:

a = [1,2,3,4,5]
b = [1,2,3,6,8]

c = a.map.with_index { |_, idx| [a[idx], b[idx]] }

# [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]]

그렇게 하면 작업이 완료되지만 예쁘지 않죠?

또한 무슨 일이 일어나고 있는지 이해하려면 잠시 멈추고 생각해야 합니다.

여기에서 Array#zip(또한 Enumerable#zip)이 작동합니다!

:

a = [1,2,3,4,5]
b = [1,2,3,6,8]

c = a.zip(b)

# [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]]

아하! … 훨씬 더 좋습니다.

동의하지 않습니까?

zip에 익숙하다면 우리는 무슨 일이 일어나고 있는지 즉시 이해할 것입니다. 그렇지 않은 경우 문서(또는 더 나은 방법은 이 문서)를 빠르게 읽어보면 설명됩니다.

zip 사용의 또 다른 이점 다른 Enumerable 메서드와 쉽게 연결할 수 있다는 것입니다.

예:계산 방법 :

a = [1,2,3,4,5]
b = [1,2,3,6,8]

c = a.zip(b).count { |a,b| a == b }

# 3

이 코드는 정확히 몇 개의 요소가 동일하고 동일한 위치에 있는지 카운트를 반환합니다.

앞서 언급한 것처럼 사용할 수 있는 또 다른 트릭은 키와 값 목록을 병합하여 해시를 만드는 것입니다.

:

a = %w(bacon coconut walnuts)
b = [100, 200, 300]

a.zip(b).to_h

# {"bacon"=>100, "coconut"=>200, "walnuts"=>300}

다른 예를 원하십니까?

알겠습니다!

여기 :

letters = Array('a'..'z')
shift   = 3

translation_map = letters.zip(letters.rotate(shift)).to_h

"hello".chars.map { |ch| translation_map[ch] }.join

이것은 시저 암호 알고리즘의 멋진 구현입니다.

요약

Array#zip에 대해 배웠습니다. 두 배열을 "병합"하고 이를 통해 멋진 트릭을 수행할 수 있는 방법입니다. 🙂

이 게시물이 마음에 드셨다면 공유하는 것을 잊지 마세요 더 많은 사람들이 읽을 수 있도록 좋아하는 소셜 네트워크에 올려보세요!