a = [1, 2, 3..9, 10, 15, 20..43]
print a.include?(5) # Returns false
我期待它返回true
,但3..9
未翻譯爲[3,4,5,6,7,8,9]
。具有範圍值的數組?
我錯過了一些愚蠢的東西,但我無法弄清楚。基本上我想用常規的fixnums和範圍來初始化它。
a = [1, 2, 3..9, 10, 15, 20..43]
print a.include?(5) # Returns false
我期待它返回true
,但3..9
未翻譯爲[3,4,5,6,7,8,9]
。具有範圍值的數組?
我錯過了一些愚蠢的東西,但我無法弄清楚。基本上我想用常規的fixnums和範圍來初始化它。
你必須圖示它
a = [1, 2, *3..9, 10, 15, 20..43]
a.include?(5) # => true
另一種解決方案,而無需圖示。
a = [1, 2, 3..9, 10, 15, 20..43]
a.any? {|i| i.kind_of?(Range) ? i.include?(5) : i == 5 }
# => true
如果你想一個「懶惰」的方式,不需要你的範圍轉換成數組元素,嘗試使用===
(情況equality)運算符。
a = [1, 2, 3..9, 10, 15, 20..43]
a.any? { |x| x === 5 }
我推薦使用這種方法,因爲它比將範圍劃分爲單獨的元素要有效得多。
謝謝,解決了它。 – Napoleon
雖然要小心噴濺範圍。通過濺出諸如'* 1..1_000_000_000_000'等範圍來創建一個不適合內存的數組是非常容易的。範圍是表達一個大序列的一種非常有效的方式,所以如果你使用大範圍,最好是實施一個智能條件測試,知道如何與單個值進行比較,並將其包含在範圍內。 –
爲什麼不摔打第二個範圍呢? [1,2,* 3..9,10,15,* 20..43] – Nishu