我的哈希脾气暴躁。 :(
我想对它进行排序,但它不想要,我找不到它的原因:
x = [{2 => "two", 1 => "one"}, {4 => "four", 3 => "three"}]
x.each do |y|
if y.is_a?(Hash) then y = y.sort end
end
(哈希必须以.each方法排序)
最后,不要使用这种结构:
[{2=>"two", 1=>"one"}, {4=>"four", 3=>"three"}]
我想要这个结构:
[[[1, "one"], [2, "two"]], [[3, "three"], [4, "four"]]]
在阅读了一些类似的问题之后,我尝试将Hash
替换为::Hash
,或者在排序之前将哈希值转换为数组,但它仍然不起作用...
如何对哈希进行排序?
答案 0 :(得分:2)
arr = [{2=>"two", 1=>"one"}, {4=>"four", 3=> "three"}]
arr.map { |h| h.sort_by(&:first) }
#=> [[[1, "one"], [2, "two"]], [[3, "three"], [4, "four"]]]
答案 1 :(得分:1)
你的循环脾气暴躁而不是你的哈希:)
您正在对哈希进行排序,但您的循环不会更新数组。
这是一个简化的例子
array.each do |y|
y = y.sort
end
上面将已排序的哈希重新分配给局部变量y
,因此不会更新array
中的值。对block参数的赋值不会写回您要枚举的数组。
使用map
代替
array = array.map do |y|
y.sort
end
答案 2 :(得分:0)
Cary Swoveland 的答案是短暂的
这里我写了一个更长的版本
x = [{ 2 => "two", 1 => "one"}, {4 => "four", 3 => "three"}]
y = x.map{ |el| el.to_a.sort }
所以变量应该像
x => [{ 2 => "two", 1 => "one"}, {4 => "four", 3 => "three"}]
y => [[[1, "one"], [2, "two"]], [[3, "three"], [4, "four"]]]