차이점을 찾기 위해 요소별로 두 배열을 비교한다고 가정해 보겠습니다.
또는 모든 인덱스에서 가장 큰 수를 찾거나 키 목록과 값 목록을 병합하여 해시를 만들고 싶을 수도 있습니다...
...이를 수행하는 "어려운 방법"은 다음과 같습니다.
예 :
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
에 대해 배웠습니다. 두 배열을 "병합"하고 이를 통해 멋진 트릭을 수행할 수 있는 방법입니다. 🙂
이 게시물이 마음에 드셨다면 공유하는 것을 잊지 마세요 더 많은 사람들이 읽을 수 있도록 좋아하는 소셜 네트워크에 올려보세요!