Как удалить все элементы, которые удовлетворяют условию в массиве в Ruby? - PullRequest
43 голосов
/ 15 февраля 2011

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

Ответы [ 4 ]

60 голосов
/ 15 февраля 2011

Вы можете использовать либо 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}).

13 голосов
/ 25 сентября 2012

Вероятно, стоит указать, что

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

и

array.delete_if {|x| x < 3}

одинаковы, но

array.reject {|x| x < 3}

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

8 голосов
/ 15 февраля 2011
  a = [ "a", "b", "c" ]
  a.delete_if {|x| x >= "b" }   #=> ["a"]
0 голосов
/ 13 сентября 2017

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

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