2015-02-24 25 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} 
相关问题