Ruby 数组获取或默认函数

Ruby 数组获取或默认函数,ruby,arrays,Ruby,Arrays,我需要以下逻辑。如果数组包含值,则返回它,否则返回一些默认值。到目前为止,我发现这可以通过使用delete实现: array.delete(value) || default_value 但是,很明显,它修改了数组。是否有类似的函数,如默认值的fetch,它采用元素而不是索引 另外,我知道这可以重写为数组。包括?(值)?值:默认值,这个问题只是为了更干净的代码。更新:我可以想到一种方法,但这比三元法更难理解: (array & [value]).first || default_va

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

array.delete(value) || default_value
但是,很明显,它修改了数组。是否有类似的函数,如默认值的
fetch
,它采用元素而不是索引


另外,我知道这可以重写为
数组。包括?(值)?值:默认值,这个问题只是为了更干净的代码。

更新:我可以想到一种方法,但这比三元法更难理解:

 (array & [value]).first || default_value
如果您愿意,您可以将其拼接到
数组中

class Array
  def fetch_value(value, default)
    (self & [value]).first || default
  end
end

a = *1..3
a.fetch_value(4, "foo")
#=> "foo"
旧答案,在我意识到您希望使用值进行查找而不是索引之前:

接受可选的第二个参数:

array.fetch(index, default)
下面是一个例子:

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

更新:我可以想出一种方法,但这比三元法更难理解:

 (array & [value]).first || default_value
如果您愿意,您可以将其拼接到
数组中

class Array
  def fetch_value(value, default)
    (self & [value]).first || default
  end
end

a = *1..3
a.fetch_value(4, "foo")
#=> "foo"
旧答案,在我意识到您希望使用值进行查找而不是索引之前:

接受可选的第二个参数:

array.fetch(index, default)
下面是一个例子:

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

他不想指定
索引
。他想知道数组是否包含值,然后返回该值,否则返回默认值。他不想指定
索引。他想知道数组是否包含一个值,然后返回该值,否则返回默认值。恐怕你找不到更简单的代码(后者),这意味着你必须实现你自己的
fetch
,它隐藏了复杂性:-)替代方法(如果默认值是
6
):
ary.find(lambda{6}{x}x==6}
我担心您找不到任何更简单的代码(后者),这意味着您必须实现自己的
fetch
,它隐藏了复杂性:-)备选方案(如果默认值是
6
):
ari.find(lambda{6}){x | x==6}