的陣列我有這樣的:Ruby的哈希值來
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
,我想這樣的:[["a","b","c"],["b","c"]]
這似乎像它應該工作,但它不會:
hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
有什麼建議嗎?
的陣列我有這樣的:Ruby的哈希值來
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
,我想這樣的:[["a","b","c"],["b","c"]]
這似乎像它應該工作,但它不會:
hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
有什麼建議嗎?
而且,簡單一點....
>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]
+!漂亮!儘管我有一個相互競爭的答案(使用'map'),我會滿意的,因爲我非常喜歡這個! –
Hash#values不僅更簡單,而且更高效。比較'ruby -e'(1..1000000).reduce({}){| h,i | h.store我,我; (1..1000000).reduce({}){| h,i | h} .values' h.store我,我; H} .MAP {| K,V | '} – jordanbtucker
+1(我試過你的代碼後驚奇地發現了)我花了一天的時間,沒有運氣用很多方法刪除索引...我只能說非常感謝你! :D –
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]]
Enumerable#collect
取得一個塊,並返回在枚舉的每個元素上運行一次塊的結果數組。所以這段代碼只是忽略這些鍵並返回一個包含所有值的數組。
Enumerable
模塊非常棒。瞭解它可以爲您節省大量時間和大量代碼。
不要忘記,就像@Ray Toal的回答一樣,'hash.values'在這裏最終是正確的答案。 – tadman
或'hash.map(&:second)':) –
我會用:
hash.map { |key, value| value }
驚訝於downvote!這工作。我嘗試過這個! –
我沒有降低它的效率,但它相當於'Hash#values'。 –
是的,我也提出了Ray的回答。當我喜歡它時,我很樂意提出一個有競爭力的答案。 –
這很簡單,只要
hash.values
#=> [["a", "b", "c"], ["b", "c"]]
這將返回填充了哈希
值的新數組,如果你想存儲新的陣列做
array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]
array_of_values
#=> [["a", "b", "c"], ["b", "c"]]
下面的答案是正確的('hash.values'是更好的IMO)。但是我想指出,當你爲'Hash#each'提供一個塊時,它只會返回散列值的全部值。如果您想對每個項目執行操作並將其作爲數組返回,請使用「Hash#collect」或其別名「Hash#map」。更多關於Enumerables的內容[here](http://ruby-doc.org/core-1.9.3/Enumerable.html)。 – brymck
這個問題看起來很奇怪......我想知道現在有多少人正在從事相同的家庭作業。 –