2015-05-04 3 views
1

Я добавляю в массив с помощью:Как удалить из многомерного массива в Ruby?

server.bans << { :mask => "#{user}", :who => "#{server}", :when => Time.now.to_i } 

Что это самый простой способ, чтобы изменить эту команду?

Должен ли я использовать .remove? Если да, то что я должен передать ему, так же, как и то, что я использовал в <<?

ответ

2

Вы можете использовать Array#pop, чтобы удалить последний элемент массива:

server.bans.pop 
2

Вы также можете использовать Array#delete_if, если вы хотите, чтобы удалить элементы, которые отвечают определенным критериям:

server.bans.delete_if{ |u| u[:mask] == "#{user}" } 
+2

Я думаю, что 'reject!' является наиболее часто используемым, но оба работают одинаково. – Drenmi

+0

Хмм, это не работает для меня, и мне интересно, почему. Запрет все еще существует в 'server.bans': -/ – Jack

1

Вы могли бы получить object_id каждого элемента в массиве для использования в качестве ссылки в будущем. Хотя использование pop будет работать, оно недоступно после добавления еще одного элемента массива.

Для просмотра object_id элементов. Возможно, они хранятся в собственном массиве.

server.bans do |ban| 
    puts ban.object_id 
end 
-1

Ruby array предоставляет метод delete_if для удаления элементов из условий массива. Вы можете использовать этот метод как

server.bans.delete_if{ |u| u[:mask] == user.to_s } 

Чтобы получить более подробную информацию о delete_if http://ruby-doc.org/core-2.2.2/Array.html#method-i-delete_if

Далее вы можете удалить пользователя! метод

+1

Это не то же самое, что и предыдущий ответ Карстена (за исключением' to_s', который является неправильным)? –

Смежные вопросы