2011-12-20 66 views

回答

28
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]] 
+2

你不需要的圖示或'flatten',只給農業協定爲'哈希[]':'哈希[h.sort_by {| K,V | -v} [0..1]' – 2011-12-20 19:30:49

+0

感謝畝,編輯 – maprihoda 2011-12-20 19:41:56

0

hash並不是自然排序(甚至以爲在Ruby實現它們)。儘量歌廳您的哈希轉換爲數組並獲得[0,4]出來的

+0

你確定他們是Ruby的? 'sort_by'返回數組 – 2011-12-20 19:09:11

+1

散列被排序爲Ruby 1.9的,但在1.8他們沒有。 – Linuxios 2011-12-20 19:12:02

+0

@Oleg是的,他們通過插入順序排列爲1.9(不能在很多設備,yanno鍵入您的姓名)。 – 2011-12-20 19:12:43

6

新紅寶石自己(請是很好,如果我錯了人!),但工作的呢?在IRB

@friends_comment_count.sort_by{|k,v| -v}.first 5 

工作對我來說,如果我明白你想實現正確

+2

其他的東西,將工作,但結果是數組的數組。 '[[:一,1],[:B,2]]'。散列被轉換成一個數組,然後是在該陣列 – 2011-12-20 19:04:41

+0

@dorsel燁正確.. – harshit 2011-12-20 19:11:33

+1

使用的'first'方法但可以通過在'散列[]'正是如此包裹它轉陣列的該陣列回哈希: '散列[@ friends_comment_count.sort_by {| K,v | -v} .first 5]'。 – 2011-12-20 19:29:02

4

不能排序哈希,這就是爲什麼sort_by不排序你的哈希。它返回一個有序數組Array。

0

在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} 
13

你就不能這樣做:

h = {"test"=>"1", "test2"=>"2", "test3"=>"3"} 

然後,如果你想第一個2:

p h.first(2).to_h 

結果:

=> {"test"=>"1", "test2"=>"2"} 
+0

不是最有效的方式去做,特別是大的哈希值,但一個不錯的,簡單的黑客,當你需要它。 – tristanm 2016-02-03 01:43:26