我需要以下邏輯。如果數組包含value
,則返回它,否則返回一些默認值。到目前爲止,我發現這可以通過使用delete
實現:數組提取或默認功能
array.delete(value) || default_value
但是,很明顯,它修改陣列。是否有類似的功能,如fetch
默認情況下需要一個元素而不是索引?
PS。我知道這可以重寫爲array.include?(value) ? value : default_value
,問題只是爲了更簡潔的代碼。
我需要以下邏輯。如果數組包含value
,則返回它,否則返回一些默認值。到目前爲止,我發現這可以通過使用delete
實現:數組提取或默認功能
array.delete(value) || default_value
但是,很明顯,它修改陣列。是否有類似的功能,如fetch
默認情況下需要一個元素而不是索引?
PS。我知道這可以重寫爲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"
他不想指定'index'。他想知道一個數組是否包含一個值,然後返回該值,否則返回默認值。 – karatedog 2012-04-02 10:47:14
恐怕你不會找到這方面的任何簡單的代碼(後者),這意味着你必須實現你自己的'fetch',它隱藏了這種複雜性:-) 可選項(如果默認值是'6'):'ary.find(lambda {6}){| x | x == 6}' – karatedog 2012-04-02 11:00:02