Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Array#zipメソッド

違いを見つけることができるように、2つの配列を要素ごとに比較したいとします。

または、すべてのインデックスで最大の数値を見つけたい場合や、キーのリストと値のリストをマージしてハッシュを作成したい場合もあります…

…これを行うための「難しい方法」は、次のようになります。

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を使用するもう1つの利点 他の列挙可能なメソッドと簡単に連鎖できるということです。

たとえば、カウント方法

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

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

# 3

このコードは、同じで同じ位置にある要素の正確な数を返します。

前に述べたように、使用できるもう1つのトリックは、キーと値のリストをマージしてハッシュを作成することです。

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について学びました メソッド。2つのアレイを「マージ」して、それを使っていくつかのクールなトリックを実行できます🙂

この投稿を楽しんだら、忘れずに共有してください お気に入りのソーシャルネットワークで、より多くの人が読めるようにしましょう!


  1. JavaScript getTime()メソッド

    JavaScriptのgetTime()メソッドは、1970年1月1日から経過したミリ秒数を返します。 以下はgetTime()関数のコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Do

  2. JavaScriptのSort()メソッド

    JavaScriptのsort()メソッドは、配列のソートに使用されます。並べ替えの順序は、アルファベット、数字、昇順、降順のいずれかです。 以下は、sort()メソッドのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&