在数组中查找满足条件的最后一个匹配项

4

我找不到一种方法来查找符合条件的数组最后一个元素。

虽然这种方式可以起作用,但似乎并不是最好的方法:

array.reverse.find {condition}

array[array.rindex {condition}]

希望得到类似于array.rfind {condition}的东西...


1
你好Léon,欢迎来到SO。arr.reverse.find { condition }在我的代码中可以正常工作,你的代码有错误吗?能否把你的代码发一下? - Alejandro Montilla
@AlejandroMontilla 这个问题不是“为什么它不能工作?”,而是“有没有更好的方法来做到这一点?” - Tom Lord
3
嗨,Alejandro,非常感谢!这对我也完美地起作用了,但我希望Ruby有一个专门的方法来做到这一点...不过看起来arr.reverse_each.find {condition}可能是更合适的方式。 - Léon Boutrand
2个回答

2

array.rindex(condition)将给出最后一个匹配元素的索引号。这将给你最后一个匹配的元素。

array[array.rindex(condition)]

是的,我知道,但我想知道是否存在一种只使用一个方法来完成这个操作的方法,类似于array.rfind(condition)或array.find_last(condition)。 - Léon Boutrand

1

我认为使用reduce函数可以完成这项任务。

array.reduce { |accumulator, element| condition ? element : accumulator }

这样,返回值将是赋给累加器的最后一个值。
请注意,累加器始终从可枚举对象的第一个元素开始,因此,如果您希望在没有任何元素满足条件的情况下返回nil,则需要将其作为参数传递给reduce,如下所示:
array.reduce(nil) { |accumulator, element| condition ? element : accumulator }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接