我有一個Hash和我一直在使用的值如何從紅寶石中獲得哈希中的前n個元素?
@friends_comment_count.sort_by{|k,v| -v}
現在我只是想獲得五大元素的哈希..一種方法是使用一個計數器,並打破時,其5 什麼是排序它紅寶石首選的方法?
感謝
我有一個Hash和我一直在使用的值如何從紅寶石中獲得哈希中的前n個元素?
@friends_comment_count.sort_by{|k,v| -v}
現在我只是想獲得五大元素的哈希..一種方法是使用一個計數器,並打破時,其5 什麼是排序它紅寶石首選的方法?
感謝
h = { 'a' => 10, 'b' => 20, 'c' => 30 }
# get the first two
p Hash[*h.sort_by { |k,v| -v }[0..1].flatten]
EDITED什麼:
# get the first two (more concisely)
p Hash[h.sort_by { |k,v| -v }[0..1]]
hash並不是自然排序(甚至以爲在Ruby實現它們)。儘量歌廳您的哈希轉換爲數組並獲得[0,4]出來的
你確定他們是Ruby的? 'sort_by'返回數組 – 2011-12-20 19:09:11
散列被排序爲Ruby 1.9的,但在1.8他們沒有。 – Linuxios 2011-12-20 19:12:02
@Oleg是的,他們通過插入順序排列爲1.9(不能在很多設備,yanno鍵入您的姓名)。 – 2011-12-20 19:12:43
新紅寶石自己(請是很好,如果我錯了人!),但工作的呢?在IRB
@friends_comment_count.sort_by{|k,v| -v}.first 5
工作對我來說,如果我明白你想實現正確
其他的東西,將工作,但結果是數組的數組。 '[[:一,1],[:B,2]]'。散列被轉換成一個數組,然後是在該陣列 – 2011-12-20 19:04:41
@dorsel燁正確.. – harshit 2011-12-20 19:11:33
使用的'first'方法但可以通過在'散列[]'正是如此包裹它轉陣列的該陣列回哈希: '散列[@ friends_comment_count.sort_by {| K,v | -v} .first 5]'。 – 2011-12-20 19:29:02
不能排序哈希,這就是爲什麼sort_by
不排序你的哈希。它返回一個有序數組Array。
在Ruby 2.2.0和以後,Enumerable#max_by
有一個可選的整數參數,使得它返回一個數組僅一個元件代替。這意味着你可以這樣做:
h = { 'a' => 10, 'b' => 20, 'c' => 30 }
n = 2
p h.max_by(n, &:last).to_h # => {"b"=>20, "c"=>30}
你就不能這樣做:
h = {"test"=>"1", "test2"=>"2", "test3"=>"3"}
然後,如果你想第一個2:
p h.first(2).to_h
結果:
=> {"test"=>"1", "test2"=>"2"}
不是最有效的方式去做,特別是大的哈希值,但一個不錯的,簡單的黑客,當你需要它。 – tristanm 2016-02-03 01:43:26
你不需要的圖示或'flatten',只給農業協定爲'哈希[]':'哈希[h.sort_by {| K,V | -v} [0..1]' – 2011-12-20 19:30:49
感謝畝,編輯 – maprihoda 2011-12-20 19:41:56