我有一个像这样的哈希:
my_hash = {"positions"=>[[2, 3, 13, 56], [2, 3, 13]]}
我想删除哈希中的第一个数组:
wanted_hash == {"positions"=> [2, 3, 13]}
我尝试过:
wanted_hash = my_hash.values[0].pop
但是删除了错误的数组。我不确定为什么,但是它删除了[2,3,13]
。
答案 0 :(得分:3)
pop
正在删除数组的最后一个元素。尝试使用shift
。
答案 1 :(得分:3)
您可以使用transform_values
并从positions
中的数组中选择第二个元素:
my_hash = {"positions"=>[[2, 3, 13, 56], [2, 3, 13]]}
wanted_hash = my_hash.transform_values { |value| value[1] }
# {"positions"=>[2, 3, 13]}
请注意,它不会修改my_hash
,它会返回一个新对象。
答案 2 :(得分:0)
在irb中执行这一系列步骤。假设您要变异my_hash:
my_hash = {"positions"=>[[2, 3, 13, 56], [2, 3, 13]]}
# => {"positions"=>[[2, 3, 13, 56], [2, 3, 13]]}
my_hash["positions"].shift
# => [2, 3, 13, 56]
my_hash
# => {"positions"=>[[2, 3, 13]]}
my_hash["positions"].flatten!
# => [2, 3, 13]
my_hash
# => {"positions"=>[2, 3, 13]}
所以,归结为:
my_hash["positions"].shift
my_hash["positions"].flatten!
答案 3 :(得分:0)
这可以通过非破坏性的set CATALINA_OPTS=-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.rmi.port=7091 -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
方法完成:
each_with)object
。
如果您使用的是ruby版本<2.4.0(引入了my_hash.each_with_object({}) { |(k, v), h| h[k] = v[1]}
方法),则可能会有所帮助。