2012-02-12 59 views
1

我想寫一行代碼告訴我,如果有一個數組中的元素滿足一組條件,然後打破真實。紅寶石一行代碼,中斷塊

例如

我有[1,2,3,4,5,6,7,8,9,10,11,12],我想找到2和3。我想寫一個襯墊,因爲它擊中6,不處理,將返回true儘快整除的第一要素數組中剩餘的元素。

我可以爲每個循環編寫一個循環並打破,但我覺得應該有一種方法可以在一行代碼中完成。

+0

處理的值,則它是通過6.使用#find或#任何取決於整除在你想知道的內容上(同一個塊可以工作)'[...] find {| n | n%6 == 0}' – 2012-02-12 08:40:42

回答

5

any?

[1,2,3,4,5,6,7,8,9,10,11,12].any?{|e| e % 2 == 0 && e % 3 == 0} 

,或者你可以用all?結合起來,有一個偉大的教程例如:

[1,2,3,4,5,6,7,8,9,10,11,12].any?{|e| [2, 3].all?{|d| e % d == 0}} 

如果你真正需要的第一個匹配的元素中返回,用find

[1,2,3,4,5,6,7,8,9,10,11,12].find{|e| [2,3].all?{|d| e % d == 0}} 
# => 6 
+0

有沒有?不返回值,它只檢查是否存在這樣的值 – 2012-02-12 08:30:50

+1

'any?'_returns_布爾值,它實際上回答OP的問題:_if數組中有一個元素符合一組criteria_。 – 2012-02-12 08:32:16

+0

對不起,你是對的。 – 2012-02-12 08:34:48

4

您應該使用:find

[1,2,3,4,5,6,7,8,9,10,11,12].find{|e| e % 2 == 0 && e % 3 == 0} 

它將返回6,以及如果它是由兩個3和2整除它不會後6.