我需要以下逻辑。如果数组包含value,则返回它,否则返回一些默认值。到目前为止,我发现这可以通过使用delete来实现:

array.delete(value) || default_value

但是,很明显,它修改了数组。有没有类似的函数,比如默认情况下的fetch,它接受一个元素而不是一个索引?
我知道这可以重写为array.include?(value) ? value : default_value,问题只是为了更干净的代码。

最佳答案

更新:有一种方法我能想到,但那比三元法更难理解:

 (array & [value]).first || default_value

如果你这么想的话,你可以把它修补成Array
class Array
  def fetch_value(value, default)
    (self & [value]).first || default
  end
end

a = *1..3
a.fetch_value(4, "foo")
#=> "foo"

旧的答案是,在我意识到您要使用查找值而不是索引之前:
Array#fetch接受可选的第二个参数:
array.fetch(index, default)

下面是一个例子:
a = *1..3
a.fetch(4, "foo")
#=> "foo"

关于ruby - 数组获取或默认功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9974892/

10-11 06:32
查看更多