2013-05-12 64 views

回答

1

我可以通過定義該算法以檢測陣列的最後一個切片想到的是最簡單的方法:

def last_slice(array, i) 
    last_slice = (array.count % i == 0) ? i : array.count % i 
    array.last(last_slice) 
end 

然後再比較一下:

if (week == last_slice(@days, 7)) 
+1

這個測試突破是否'@days.size%7 = 0'! – dbenhur 2013-05-12 22:08:33

+1

如果前一週與上週的價值相同,則它也會中斷。實際上,任何比較值而不是位置的方法在表明它是最後枚舉的信號時會受到誤報。 – dbenhur 2013-05-12 22:22:20

+0

@dbenhur,for'if week == @days [-7 ..- 1]'你說得對。如果只有3個(#ruby-doc.org/core-2.0/Array.html#method-i-last),那麼'#last'也不會代表[只檢索3個元素](http://ruby-doc.org/core-2.0/Array.html#method-i-last)。編輯) – Shoe 2013-05-13 00:45:08

-1
@days.each_slice(7) { |week| if (week.last == @days.last) then <your code here> end } 
+0

還有什麼你期待的代碼? – draxxxeus 2013-05-12 16:59:04

+0

你可以通過在迭代之外執行'last_day = @ days.last'來進一步優化它,並且'if(week.last == last_day)' – draxxxeus 2013-05-12 17:20:18

+2

你認爲'@ days'數組的最後一個元素將是唯一的在「周」片?如果每週的最後一個元素總是一樣的話會怎麼樣? – Shoe 2013-05-12 20:13:33

0

這是一個暗示,希望能幫助你:

ar = [1,2,3,1,2,3,"a","b","c"] 
e = ar.each_slice(3) 
e.size.times do |i| 
begin 
    i = e.next 
    e.peek 
rescue StopIteration 
    p "reached last iteration : #{i}" 
end 
end 
#=> "reached last iteration : [\"a\", \"b\", \"c\"]" 

或者你可以如下操作:

e = ar.each_slice(3) 
e.with_index{|i,ind| p i if ind == e.size - 1 } 
#=> ["a", "b", "c"] 

或者你可以做如下太:

ar = [1,2,3,1,5,3,"a","b","c"] 
e = ar.each_slice(3) 
e.size.times{|i| i = e.next;p i if !(e.peek rescue nil) } 
#=> ["a", "b", "c"] 
+0

你在正確的軌道上,但過於複雜的一點。你可以'e.with_index {| days,i | ...}'並檢查'i == e.size - 1'來檢測塊內的最後一個塊。在1.9.3中(沒有'e.size'),你可以使用'dm = a.length.divmod(3); size = dm [0] +(dm [1] == 0?0:1)'而不是'e.size'。 – 2013-05-12 17:45:31

+0

@ muistooshort我會使用'inline rescue'來縮短它的工作時間。我有些困惑與輸出。一旦我會有信心,並會在這裏發佈。仍然工作:( – 2013-05-12 17:47:39

+0

@ muistooshort我完成了,請評估:) – 2013-05-12 19:29:22

1
@days.each_slice(7).with_index do |week,i| 
    if i == (@days.size-1)/7 
    # last one 
    end 
    ... 
end 

另外,如果您在分組碼是上週高度發散:

weeks = @days.each_slice(7).to_a 
weeks[0...-1].each {|week| ... } 
weeks[-1].tap {|last_week| ... } 
相關問題