В Ruby есть невероятные методы для изменения массивов на основе логики в блоке.
Чтобы получить массив только с нечетными числами, вы можете удалить элементы, которые не соответствуют тесту, илисохранить номер, который соответствует тесту.Вы можете либо вернуть новый массив, либо использовать один из методов модификации на месте.
Чтобы удалить нежелательные значения, используйте либо .reject для нового массива, либо .reject! чтобы изменить существующий массив на месте.
Поскольку мы удаляем, мы будем использовать {|e| e%2!=0}
внутри блока для нечетных чисел:
> [1,2,3,4,5,6,7,8,9,10].reject {|e| e%2!=0}
=> [2, 4, 6, 8, 10] # new array
> arr = [1, 2, 3, 4, 5, 6, 7, 8, 10]
> arr.reject! {|e| e%2!=0}
=> [2, 4, 6, 8, 10] # arr modified in place
Вместо блока можно также использовать логический тест odd?
длятот же результат:
> [1,2,3,4,5,6,7,8,9,10].reject &:odd?
=> [2, 4, 6, 8, 10]
Или вы можете оставить нужные значения, а другие значения не будут сохранены.Вы бы использовали {|e| e%2==0}
внутри блока для четных значений.Или вы можете использовать &:even?
вместо блока.
Вы можете использовать .keep_if , чтобы вернуть новый массив:
> arr
=> [1, 2, 3, 4, 5, 6, 7, 8, 10]
> [1,2,3,4,5,6,7,8,9,10].keep_if {|e| e%2==0}
=> [2, 4, 6, 8, 10] # new array.
или использовать .выберите! для изменения на месте:
> arr = [1, 2, 3, 4, 5, 6, 7, 8, 10]
=> [1, 2, 3, 4, 5, 6, 7, 8, 10]
> arr.select! {|e| e%2==0}
=> [2, 4, 6, 8, 10]
> arr
=> [2, 4, 6, 8, 10] # arr modified in place