2015-02-24 20 views
0

例如:在Ruby中,如何根據鍵中的單詞數量對散列中的元素進行排序?

{"job" => 1, "big job" => 2, "super job" => 1, "work" => 2, "super big job" => 1} 

我想變成像這樣

{"super big job" => 1, "big job" => 2, "super job" => 1, "job" => 1, , "work" => 2} 

即三個詞鍵先走,然後雙字鍵,一個字鍵走過去。 我知道我可以使用key.split('').length函數來計算單詞,但我怎樣才能使用它來實際修改哈希中元素的順序。

+4

...爲什麼你要在哈希的結果?儘管Ruby哈希現在被命令*,但它們並不在過去。按照更自然的順序返回它們,就像數組一樣。 – 2015-02-24 13:29:17

回答

1

你可以做這樣的事情:

a = {"job" => 1, "big job" => 2, "super job" => 1, "work" => 2, "super big job" => 1} 
Hash[a.sort_by { |k, v| k.split.size }.reverse] 
# => {"super big job"=>1, "super job"=>1, "big job"=>2, "work"=>2, "job"=>1} 
1
x = {"job" => 1, "big job" => 2, "super job" => 1, "work" => 2, "super big job" => 1} 

p x.sort_by{|x,|-x.split.size}.to_h #=> {"super big job"=>1, "big job"=>2, "super job"=>1, "work"=>2, "job"=>1} 
相關問題