我想寫一行代碼告訴我,如果有一個數組中的元素滿足一組條件,然後打破真實。紅寶石一行代碼,中斷塊
例如
我有[1,2,3,4,5,6,7,8,9,10,11,12]
,我想找到2和3。我想寫一個襯墊,因爲它擊中6,不處理,將返回true儘快整除的第一要素數組中剩餘的元素。
我可以爲每個循環編寫一個循環並打破,但我覺得應該有一種方法可以在一行代碼中完成。
我想寫一行代碼告訴我,如果有一個數組中的元素滿足一組條件,然後打破真實。紅寶石一行代碼,中斷塊
例如
我有[1,2,3,4,5,6,7,8,9,10,11,12]
,我想找到2和3。我想寫一個襯墊,因爲它擊中6,不處理,將返回true儘快整除的第一要素數組中剩餘的元素。
我可以爲每個循環編寫一個循環並打破,但我覺得應該有一種方法可以在一行代碼中完成。
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
有沒有?不返回值,它只檢查是否存在這樣的值 – 2012-02-12 08:30:50
'any?'_returns_布爾值,它實際上回答OP的問題:_if數組中有一個元素符合一組criteria_。 – 2012-02-12 08:32:16
對不起,你是對的。 – 2012-02-12 08:34:48
您應該使用: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.
處理的值,則它是通過6.使用#find或#任何取決於整除在你想知道的內容上(同一個塊可以工作)'[...] find {| n | n%6 == 0}' – 2012-02-12 08:40:42