在 Ruby 中,如何根据键中单词的数量对散列中的元素进行排序?
In Ruby, how do I sort the elements in a hash by the quantity of words in the keys?
例如:
{"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 函数来计算单词数,但是我如何使用它来实际修改哈希中元素的顺序。
你可以这样做:
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}
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}
例如:
{"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 函数来计算单词数,但是我如何使用它来实际修改哈希中元素的顺序。
你可以这样做:
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}
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}