Как удалить массив внутри хеша - PullRequest
1 голос
/ 23 июня 2019

У меня есть хеш, который выглядит так:

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 ]

3 голосов
/ 23 июня 2019

Вы можете использовать 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, он возвращает новый объект.

3 голосов
/ 23 июня 2019

pop удаляет последний элемент массива.Попробуйте shift вместо.

0 голосов
/ 10 июля 2019

Это можно сделать неразрушающим методом each_with)object:

my_hash.each_with_object({}) { |(k, v), h| h[k] = v[1]}.

Если вы используете версию ruby ​​<2.4.0 (где был введен метод <code>transform_values)это может помочь.

0 голосов
/ 24 июня 2019

Выполнена эта серия шагов в ирб. Предполагается, что вы хотите изменить 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!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...