Допустим, у меня есть массив, который выглядит следующим образом:Удаление строк из массива в Руби
arr = [ 1, 5, "dog", 6 ]
Как я могу удалить строку, так что мой вывод будет выглядеть следующим образом:
[ 1, 5, 6 ]
Допустим, у меня есть массив, который выглядит следующим образом:Удаление строк из массива в Руби
arr = [ 1, 5, "dog", 6 ]
Как я могу удалить строку, так что мой вывод будет выглядеть следующим образом:
[ 1, 5, 6 ]
попробуйте это:
arr.select! { |el| el.class != String }
или если вы хотите только цифры:
arr.select! { |el| el.is_a? Numeric }
Вы также можете использовать обратный путь и использовать reject!
. Он удаляет все элементы, соответствующие установленному вами условию.
arr.reject! { |el| !el.is_a? Numeric }
Это функционально такой же, как
arr.select! { |el| el.is_a? Numeric }
'is_a?' Или '===' предпочтительнее вызова '.class' на что-то вручную. – tadman
Ваш первый пример не работает, возвращает пустой массив '[]'. Это связано с тем, что при проверке класса регулярного числа на 'class' он возвращает' Fixnum'. В то время как 'is_a?' Также учитывает классы предков. –
Другой способ раунд будет использовать случай равных:
[1, 5, "dog", 6].reject &String.method(:===)
#⇒ [1, 5, 6]
Это бесполезно умно. 'reject {| s | Строка === s} 'короче, яснее и (я предполагаю) более результативна. –
@ Джордан, что он короче, это факт, субъективно, я тоже нахожу его более ясным, но я не уверен в более «эффектном», поскольку я никогда не мог понять, что это значит. Также голосование, похоже, ставит под сомнение, что оно «бесполезно умно», и многие из них, очевидно, нуждаются в публикации умных ответов. –
@CarySwoveland [Это то, что я имею в виду под исполнителем.] (Https://gist.github.com/jrunning/fe7c06ce17079d917a5d8dc7b65406c7) –
Это хорошая возможность использовать Enumerable#grep
или Enumerable#grep_v
:
[ 1, 5, "dog", 6 ].grep(Numeric)
# => [1, 5, 6]
[ 1, 5, "dog", 6 ].grep_v(String)
# => [1, 5, 6]
Он работает! Спасибо Bartek – Bitwise
'select' семантически некорректно, здесь стоит использовать' reject'. – mudasobwa