В Ruby легко удалить элементы из массива - для этого даже существует много способов. Чтобы удалить элемент с известным индексом, достаточно вызвать метод
delete_at
:
a = [10, 12, 14, 16, 18]
a.delete_at(3) # Возвращает 16.
# а равно [10, 12, 14, 18]
a.delete_at(9) # Возвращает nil {вне диапазона).
Все элементы с заданным значением поможет удалить метод
delete
. Он возвращает значения удаленных элементов или
nil
,
если искомый элемент не найден:
b = %w(spam spam bacon spam eggs ham spam)
b.delete("spam") # Возвращает "spam"
# b равно ["bacon", "eggs", "ham"]
b.delete("caviar") # Возвращает nil
Метод
delete
принимает также блок. Это не вполне согласуется с интуицией; если объект не найден, происходит вычисление блока (при этом могут выполняться разнообразные операции) и возвращается вычисленное значение.
с = ["alpha", "beta", "gamma", "delta"]
c.delete("delta") { "Nonexistent" }
# Возвращается "delta" (блок не вычисляется).
с.delete("omega") { "Nonexistent" }
# Возвращается "Nonexistent".
Метод
delete_if
передает каждый элемент массива в блок и удаляет те элементы, для которых вычисление блока дает