簡體   English   中英

數組中的Ruby 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方法獲取每一對。 kkeyv是值,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM