web-dev-qa-db-ja.com

Ruby検出方法

選択には意味があります。しかし、誰かが.detectを私に説明できますか?これらのデータがわかりません。

>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,6) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,7) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(2,7) }
=> 2
>> [1,2,3,4,5,6,7].detect { |x| x.between?(1,7) }
=> 1
>> [1,2,3,4,5,6,7].detect { |x| x.between?(6,7) }
=> 6
>> [1,2,3,4,5,6,7].select { |x| x.between?(6,7) }
=> [6, 7]
>> [1,2,3,4,5,6,7].select { |x| x.between?(1,7) }
=> [1, 2, 3, 4, 5, 6, 7]
36
JZ.

Detectは、ブロックがTRUEを返すリストの最初の項目を返します。あなたの最初の例:

_>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) }
=> 3
_

これは、式x.between?(3,4)に対してTRUEを返すリストの最初の項目であるため、_3_を返します。

detectは、条件が初めてtrueを返した後に反復を停止します。 selectは、入力リストの最後に到達するまで繰り返し、ブロックがtrueを返したすべてのアイテムを返します。

76
ryeguy

detectは、もしあれば述語を満たす最初の値を返し、そうでなければnilを返します。 selectは、述部を満たすすべての値を返します。 a.detect { p }a.select { p }[0]に類似しています

 irb(main):001:0> [1,2,3].detect { true }
 => 1
 irb(main):002:0> [1,2,3].detect { false }
 => nil
 irb(main):003:0> [1,2,3].detect { |x| x % 2 == 0 }
 => 2
9
Logan Capaldo

Ruby-docsは、メソッドについて学びたい場合に最適なリソースです。

列挙可能#検出

5
Pran

finddetectは常に単一のオブジェクトを返すか、何も一致しない場合はnilを返します。

[1,2,3,4,5,6,7].detect { |x| x.between?(1,7) }
=> 1

find_allおよびselectは、一致するものを見つけたものの配列を返します。

[1,2,3,4,5,6,7].select { |x| x.between?(1,7) }
=> [1, 2, 3, 4, 5, 6, 7]

参照リンク

4
Jacs