【发布时间】:2011-03-29 23:51:17
【问题描述】:
是否有一种内置方法可以根据返回 true 的块条件从数组中删除值,并返回被删除的值?
这是我正在尝试做的简化版本,但似乎必须有更好的方法:
array = [1,2,3,4,5,6,7,8,9,10]
index = array.index {|v| v == 5} # returns index if block is true
value = array.delete_at(index) # deletes and returns element at index
value 则为 5
【问题讨论】:
-
你为什么要删除一个项目然后想要它的价值?
-
这更像是我的好奇心。 Array 有一个 delete 方法,它删除一个值并返回它,还有一个 delete_if 方法,它接受一个块并删除值,但不返回删除的值。似乎很奇怪,没有一种方法可以两者兼得。
-
这是一个有效的问题。考虑一个必须与某些数据进行比较但只进行一次的大型数组。从数组中删除项目会大大加快这个过程。
-
我的用例:我正在慢慢地从列表中挑选项目。每次我都需要遍历列表,直到找到合适的候选人,然后我想将其从列表中删除。
标签: ruby-on-rails ruby arrays