it-swarm-ru.tech

Как удалить все элементы, которые удовлетворяют условию в массиве в Ruby?

Как я могу реализовать это в Ruby? Есть ли какая-либо строка метода кода? Скажем, я хочу избавиться от всех элементов, которые меньше 3 целочисленного массива.

39
Chan

Вы можете использовать new_array = array.reject {|x| x < 3} (reject возвращает новый массив) или array.reject! {|x| x < 3} (reject! aka delete_if изменяет массив на месте).

Есть также (несколько более распространенный) метод select, который действует как reject, за исключением того, что вы задаете условие для сохранения элементов, а не для их отклонения (то есть, чтобы избавиться от элементов меньше 3, вы должны использовать new_array = array.select {|x| x >= 3}).

57
sepp2k

Наверное, стоит отметить, что

array.reject! {|x| x < 3}

а также 

array.delete_if {|x| x < 3}

Такие же, но

array.reject {|x| x < 3}

Все равно вернет тот же результат, но не изменит «массив».

12
ktec
  a = [ "a", "b", "c" ]
  a.delete_if {|x| x >= "b" }   #=> ["a"]
8
Fernando Diaz Garrido

Это прекрасно работает для цифр и букв в алфавитном порядке. их значения сравниваются, что если условия изменятся?

array = ["Type", ": Jointed", "Axes", ": 6", "Reach", ": 951 mm", "Capacity", ": 6 Kg", "Uses", ": ", "Arc welding, material handling, machine loading, application", "This particular unit is in excellent condition with under 700 hours."]

Нам нужно удалить все элементы после значения «Uses» Пример:

array = ["Type", ": Jointed", "Axes", ": 6", "Reach", ": 951 mm", "Capacity", ": 6 Kg"]

Итак, это описание не работает (оно просто удаляет один элемент):

array.delete_if {|x| x >= "Uses" }
["Type", ": Jointed", "Axes", ": 6", "Reach", ": 951 mm", "Capacity", ": 6 Kg", ": ", "Arc welding, material handling, machine loading, application", "This particular unit is in excellent condition with under 700 hours."]
0
Alexey Strizhak