2012-04-02 89 views
2

我需要以下邏輯。如果數組包含value,則返回它,否則返回一些默認值。到目前爲止,我發現這可以通過使用delete實現:數組提取或默認功能

array.delete(value) || default_value 

但是,很明顯,它修改陣列。是否有類似的功能,如fetch默認情況下需要一個元素而不是索引?

PS。我知道這可以重寫爲array.include?(value) ? value : default_value,問題只是爲了更簡潔的代碼。

+1

恐怕你不會找到這方面的任何簡單的代碼(後者),這意味着你必須實現你自己的'fetch',它隱藏了這種複雜性:-) 可選項(如果默認值是'6'):'ary.find(lambda {6}){| x | x == 6}' – karatedog 2012-04-02 11:00:02

回答

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" 
+0

他不想指定'index'。他想知道一個數組是否包含一個值,然後返回該值,否則返回默認值。 – karatedog 2012-04-02 10:47:14