2011-02-04 2 views
1

Использование Ruby 1.9.Ruby delete_if block

У меня есть delete_if блок:

@logHash[date].delete_if{ | logItem | logItem.name == name } 

Где logItem.name это имя logItem и name это имя logItem я ищу. Это работает отлично, за исключением того, что удаляет каждый logItem с указанным name. Есть ли способ найти первый элемент с равным name и удалить его только? Поэтому, если есть два logItems, которые имеют одинаковый name, я хочу удалить только один из них. Есть идеи?

+0

Вы спрашиваете о массиве, а не о хэше, верно? –

+0

Да, это массив. –

ответ

2

Я бы использовал Array#index, чтобы найти индекс первого элемента с соответствующим именем, а затем Array#delete_at, чтобы удалить его.

index_to_delete = @logHash[date].index {|log_item| log_item.name == name} 
@logHash[date].delete_at(index_to_delete) 
+0

Отлично! Спасибо. –