数组提取或默认功能

时间:2012-04-02 10:39:27

标签: ruby arrays

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

来实现
array.delete(value) || default_value

但是,显然,它会修改数组。是否有像fetch这样的函数,默认采用元素而不是索引?

PS。我知道这可以改写为array.include?(value) ? value : default_value,问题只是为了更清晰的代码。

1 个答案:

答案 0 :(得分:4)

更新:我可以想到一种方式,但这比三元更难阅读:

 (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"