массивы в Ruby, как справиться с этой ситуацией? - PullRequest
3 голосов
/ 09 марта 2012

Допустим, у меня есть следующий массив:

arr = ["", "2121", "8", "myString"]

Я хочу вернуть false, если массив содержит любые нецифровые символы.

Ответы [ 2 ]

8 голосов
/ 09 марта 2012
arr.all? { |s| s =~ /^\d+$/ }

Это будет проверять для каждого элемента, если он состоит только из цифр (\d) - Если какой-либо из них нет, возвращается false.

Редактировать: Вы не указали полностью, является ли пустая строка действительной или нет.Если это так, строка должна быть переписана следующим образом (согласно DarkDust):

arr.all? {|s| s =~ /^\d*$/ }
2 голосов
/ 09 марта 2012

Если разрешены пустые строки:

def contains_non_digit(array)
    !array.select {|s| s =~ /^.*[^0-9].*$/}.empty?
end

Объяснение: этот фильтр фильтрует массив для всех строк, которые соответствуют регулярному выражению.Это регулярное выражение верно для строки, которая содержит хотя бы один нецифровый символ.Если результирующий массив пуст, массив не содержит нецифровых строк.Наконец, нам нужно отрицать результат, потому что мы хотим знать, что массив содержит содержит нецифровые строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...