如何删除哈希内的数组

时间:2019-06-23 20:38:12

标签: ruby hashmap

我有一个像这样的哈希:

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]

4 个答案:

答案 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]}方法),则可能会有所帮助。