[英]In Ruby, is there an Array method that combines 'select' and 'map'?
[英]Ruby map method in an array
有人可以幫助我了解此代碼中地圖功能具有哪些功能嗎?
counts = @a.group_by{|i| i}.map{|k,v| [k[0], k[1], v.count]}
@a.group_by{|i| i}
@a.group_by{|i| i}
正在產生一個散列,其中鍵/值對是Array
。
現在, #map
方法獲取每一對。 k
是key
, v
是值,在map
創建一個數組[first_entry_of_array,second_entry_of_array,value_array_size]
(當鍵/值都為array時)。 我說過key
可以是一個數組,因為您使用了k[0]
, k[1]
和Array#[]
是它的實際方法。
范例:
a = [ %w(foo bar) ,%W(baz bar), %w(foo bar) ]
a.group_by { |e| e }
# => {["foo", "bar"]=>[["foo", "bar"], ["foo", "bar"]],
# ["baz", "bar"]=>[["baz", "bar"]]}
a.group_by { |e| e }.map{|k,v| [k[0], k[1], v.count]}
# => [["foo", "bar", 2], ["baz", "bar", 1]]
key
也可以是字符串 。 然后它在#map
內部將是[first_character_of_string,second_character_of_string,value_array_size]
。 與之相同的原因,我懷疑key
可以是字符串,因為那些調用是String#[]
方法調用。
范例:
a = %w(foo bar foo baz bar)
a.group_by { |e| e }
# => {"foo"=>["foo", "foo"], "bar"=>["bar", "bar"], "baz"=>["baz"]}
# ^ ^
# key value
a.group_by { |e| e }.map{|k,v| [k[0], k[1], v.count]}
# => [["f", "o", 2], ["b", "a", 2], ["b", "a", 1]]
基本上, #map
將在此處產生一個array數組 。
直接從map
文檔:
對於枚舉中的每個元素,返回一個帶有一次運行塊結果的新數組。
在您的示例中, 使用running塊的結果表示在每次迭代之后,從#map
的塊開始生成#map
[k[0], k[1], v.count]
。
直接來自group_by
的文檔:
按塊結果對集合進行分組。 返回一個哈希值 ,其中鍵是來自塊的評估結果 , 值是集合中與鍵相對應的元素的數組 。
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.