Использование функции .map для создания хэшей - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть массив [5,2,6,4], и я хотел бы создать такую ​​структуру, как первый, минус второй и т. Д. До последней строки.

Я пытался использовать карту, но не уверен, что делать, так какмне могут понадобиться индексы.

Я бы хотел сохранить результат во что-то похожее на:

{1 => (5, 2, 3), 2 =>(2,6,-4), 3 => (6,4,2)}

Так что массив x должен возвращать x-1 хешей.Кто-нибудь знает, как это сделать?должно быть простым.Спасибо.

Ответы [ 3 ]

3 голосов
/ 24 апреля 2019

Во-первых, вы хотите работать с элементами массива попарно: 5,2, 2,6, ... Это означает, что вы хотите использовать each_cons:

a.each_cons(2) { |(e1, e2)| ... }

Тогда вы захотите, чтобы индекс получил хеш-ключи 1, 2, ...;который предлагает добавить Enumerator#with_index в микс:

a.each_cons(2).with_index { |(e1, e2), i| ... }

Затем вы можете использовать with_object, чтобы получить в игру последний кусок (хеш):

a.each_cons(2).with_index.with_object({}) { |((e1, e2), i), h| h[i + 1] = [e1, e2, e1 - e2] }

Если вы считаете, что все круглые скобки в аргументах блока слишком шумные, вы можете сделать это пошагово, а не в одной строчке.

3 голосов
/ 24 апреля 2019

Вы можете использовать each_index:

a = [5, 2, 6, 4]
h = {}
a[0..-2].each_index { |i| h[i+1] = [a[i], a[i+1], a[i] - a[i+1]] } 
h
 => {1=>[5, 2, 3], 2=>[2, 6, -4], 3=>[6, 4, 2]} 
1 голос
/ 24 апреля 2019

Попробуйте использовать

 each_with_index

Предположим, у вас есть массив:

arr = [3,[2,3],4,5]

И вы хотите скрыть с помощью хэша (пара ключ-значение). «Ключ» обозначает индекс массива, а «значение» обозначает значение массива. Возьмите пустой хеш, итерируйте с each_with_index, вставьте в хеш и, наконец, напечатайте хеш.

Попробуйте это:

hash={}

arr.each_with_index do |val, index|
    hash[index]=val
end

p hash

Его вывод будет:

{0=>3, 1=>[2, 3], 2=>4, 3=>5}

Если вы хотите, чтобы индекс всегда начинался с 1 или 2 и т. Д., Используйте

arr.each.with_index(1) do |val, index|
    hash[index] = val
end

Вывод будет:

{1=>3, 2=>[2, 3], 3=>4, 4=>5}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...