我需要以下逻辑。如果数组包含value
,则返回它,否则返回一些默认值。到目前为止,我发现可以使用delete
:
array.delete(value) || default_value
但是,显然,它会修改数组。是否有像fetch
这样的函数,默认采用元素而不是索引?
PS。我知道这可以改写为array.include?(value) ? value : default_value
,问题只是为了更清晰的代码。
答案 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"