我想返回true如果輸入(n)包含3行中的重複,否則返回false。如何檢查數組是否包含3個連續的重複項?
我的代碼:
def got_three?(n)
n.each_cons(3) { |a, b, c| a == b && b == c ? true : false }
end
此函數返回一個錯誤,我不能確定,爲什麼。任何幫助?
我想返回true如果輸入(n)包含3行中的重複,否則返回false。如何檢查數組是否包含3個連續的重複項?
我的代碼:
def got_three?(n)
n.each_cons(3) { |a, b, c| a == b && b == c ? true : false }
end
此函數返回一個錯誤,我不能確定,爲什麼。任何幫助?
無需鏈的方法,只要使用Enumerable#each_cons
與塊:
array.each_cons(3) { |f, s, t| break true if f == t && s == t}
返回true
如果數組包含在一排3次的重複,否則nil
(簡單如果您確切需要true
或false
,請使用!!
)。
基準:
require 'benchmark'
array = (0..1000).to_a.push(*[3, 3, 3])
Benchmark.bmbm(20) do |x|
x.report(:chain) do
array.each_cons(3).any? { |a, b, c| a == b && b == c }
end
x.report(:one_block) do
array.each_cons(3) { |f, s, t| break true if f == t && s == t}
end
end
結果:
user system total real
chain 0.000000 0.000000 0.000000 ( 0.000167)
one_block 0.000000 0.000000 0.000000 ( 0.000101)
正如你所看到的,這個解決方案是快了1.6倍倍。快樂編碼:)
_「這是返回一個錯誤」_ - 顯示它,請。 – Stefan
「這是返回一個錯誤」不是一個足夠精確的錯誤描述,我們可以幫助你。 *什麼*不起作用? *如何*不起作用?你的代碼有什麼問題?你有錯誤信息嗎?什麼是錯誤信息?你得到的結果不是你期待的結果嗎?你期望得到什麼結果?爲什麼?你得到了什麼結果?兩者有什麼不同?你正在觀察的行爲不是所期望的行爲?什麼是期望的行爲,爲什麼,觀察到的行爲是什麼,以及它們以何種方式不同? –
你能提供一個你想要發生什麼的*精確*規範,包括任何和所有規則,這些規則中的例外,角落案例,特殊情況,邊界案例和邊緣案例?您是否可以提供示例輸入和輸出,以顯示您在正常情況下以及所有例外情況,角落情況,特殊情況,邊界情況和邊緣情況下預期會發生的情況?例如:如果數組爲空,應該返回什麼?如果少於3個元素會怎麼樣?如果'n'不是一個數組而是一個無限流? –