Как правильно изменить массив во время его итерации

avatar
Omn
8 августа 2021 в 19:14
55
1
1

В Crystal я хочу изменить массив, который повторяю. Я делаю следующее:

strings = ["A","B","C"]

i = 0
strings.each do |string|
  strings[i] = string * 2
  i += 1
end

Хотя это не самое худшее, я чувствую, что должен быть более идиоматический способ добиться этого, что-то вроде:

strings = ["A","B","C"]

strings.each do |string|
  string = string * 2
end

В Кристалле возможно что-то подобное? Предпочтительно что-то, устраняющее необходимость в дополнительной переменной, такой как i в этом случае. Если да, считается ли это хорошей практикой?

Источник

Ответы (1)

avatar
Johannes Müller
8 августа 2021 в 19:23
3

Возможно, вы ищете Array#map!

В этом случае strings.map! {|string| string*2} делает то же самое.