2012-11-12 39 views
45

數組的第一個元素是沒有找到一個陣列會議的第一個元素在某些情況比這更短的方式:與條件

my_array[ my_array.index {|x| x.some_test} ] 

回答

82

試試這個:

my_array.find{|x| x.some_test } 

或者這裏有一個快捷方式(感謝@LarsHaugseth提醒它)

my_array.find(&:some_test) 
+3

可以縮短到'my_array.find的陣列(&:some_test)' –

+0

@LarsHaugseth:你是正確的,當然。謝謝。 –

4

至於我覺得混亂。因爲我預計收到多個對象的請求。

我更喜歡使用detect來獲得不同的結果。

select找到他們所有。

這裏什麼紅寶石文檔講述了他們:

detect(ifnone = nil) {| obj | block } → obj or nil click to toggle source 
find(ifnone = nil) {| obj | block } → obj or nil 
detect(ifnone = nil) → an_enumerator 
find(ifnone = nil) → an_enumerator 

通行證枚舉阻止每個條目。返回第一個塊不是假的。如果沒有對象匹配,則調用ifnone並在指定時返回結果,否則返回nil。

find_all {| obj | block } → array click to toggle source 
select {| obj | block } → array 
find_all → an_enumerator 
select → an_enumerator 

返回包含枚舉的所有元素對於哪個塊是不假

+1

找到/檢測,映射/收集,減少/注入 - 有一個每個人的方法:) –

+5

對我來說,'detect'聽起來不像一個正確的方法。 'find'至少可以*找到*並返回一些東西。什麼'detect'確實並返回 - 我不知道沒有諮詢文檔。 –

+0

儘管如此,ruby社區大部分都已經在'find'找到了。你切換的一個很好的理由。 – pguardiario