クリスタル1.4列挙可能なChrountは、現在の数をカウントするオプションのハッシュを受け入れます


列挙体は、トラバース、検索、フィルタリング、オブジェクトの問い合わせを意味します.
クリスタルでは、我々にはクラスがありますArray , Hash , Range , などを使用して、その列挙機能を取得しますEnumerable モジュールです.
このEnumerable モジュールは様々なメソッドを提供します.#select , #map , #reduce , and #uniq 我々は頻繁に使用し、知られていない#tally このポストはどこですか.#tally コレクション内の要素の出現回数をカウントし、すべての要素のカウントを含むハッシュを返します.
['a', 'b', 'c', 'b'].tally # => {'a'=>1, 'b'=>2, 'c'=>1}


語のリストの例を考えてください、そして、あなたは各々のチャーの総数を数えたいです.
このタイプの問題は、我々の#tally チャーの総量を計算する方法
次のような言葉があると思います.
word_one = "crystal"
word_two = "ruby"

以前


各単語の文字の量を計算する:
tally_one = word_one.chars.tally
# => {'c' => 1, 'r' => 1, 'y' => 1, 's' => 1, 't' => 1, 'a' => 1, 'l' => 1}

tally_two = word_two.chars.tally
# => {'r' => 1, 'u' => 1, 'b' => 1, 'y' => 1}

total_tally = tally_one.merge(tally_two) { |k, v1, v2| v1 + v2 }
# => {'c' => 1, 'r' => 2, 'y' => 2, 's' => 1, 't' => 1, 'a' => 1, 'l' => 1, 'u' => 1, 'b' => 1}
合併したtally_one and tally_two とハッシュ値を加算して、charsの結合カウントを取得します.

アフター


合計を計算するには、クリスタル1.4Enumerable#tally now accepts 出現を数えるオプションのハッシュ.
この場合、我々はアイテムの数のランニング集計を格納し、それを#tally メソッド.
word_one = "crystal"
word_two = "ruby"

total_tally = {} of Char => Int32

word_one.chars.tally(total_tally)
word_two.chars.tally(total_tally)

total_tally
=> {'c' => 1, 'r' => 2, 'y' => 2, 's' => 1, 't' => 1, 'a' => 1, 'l' => 1, 'u' => 1, 'b' => 1}
上記の例では、クリスタル1.4で見ることができますtotal_tally への引数としてのハッシュ#tally charsのカウントを格納するメソッド.
最後に、1行にコードを簡略化できます.
words = ["crystal", "ruby"]

total_tally = words.reduce({} of Char => Int32) { |acc, word| word.chars.tally(acc) }