我有一個名爲myFilter的方法,它接受一個數組,並過濾出不符合要求的元素。我該如何修改我的ruby方法,以便它還包含一段代碼?
例如。
arr = [4,5,8,9,1,3,6]
answer = myfilter(arr) {|i| i>=5}
此運行將與元素5,8,9,6返回數組,因爲他們比我將如何瓶坯這一切都大於或等於5
?該算法很容易,但我不明白我們如何採取這種情況。
謝謝。
我有一個名爲myFilter的方法,它接受一個數組,並過濾出不符合要求的元素。我該如何修改我的ruby方法,以便它還包含一段代碼?
例如。
arr = [4,5,8,9,1,3,6]
answer = myfilter(arr) {|i| i>=5}
此運行將與元素5,8,9,6返回數組,因爲他們比我將如何瓶坯這一切都大於或等於5
?該算法很容易,但我不明白我們如何採取這種情況。
謝謝。
你可以做
def my_filter(arr, &block)
arr.select(&block)
end
然後調用
my_filter([1, 2, 3]) { |e| e > 2 }
=> [3]
而是你可以調用select
直接塊:)
這非常完美非常感謝 – EaEaEa
我理所當然的,你不希望使用select
方法或類似方法,但您想了解塊如何工作。
def my_filter(arr)
if block_given?
result = []
arr.each { |element| result.push(element) if yield element } # here you use the block passed to this method and execute it with the current element using yield
result
else
arr
end
end
好的做法是提供'return enum_for(:myfilter,* args),除非block_given?'這個方法可以在沒有塊的情況下調用(懶惰)。 – mudasobwa
的慣用方法是:在Enumerator::Lazy#enum_for
def my_filter(arr)
return enum_for(:my_filter, arr) unless block_given?
arr.each_with_object([]) do |e, acc|
acc << e if yield e
end
end
更多信息。
你寫過,你有這樣的方法,但畢竟,似乎你沒有這樣的方法。 – sawa
你能告訴我們你的方法myFilter中的代碼嗎? – garyh
您知道'myfilter(arr){...}'相當於'arr.select {...}',不是嗎? – Stefan