選択には意味があります。しかし、誰かが.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]
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を返したすべてのアイテムを返します。
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
Ruby-docsは、メソッドについて学びたい場合に最適なリソースです。
find
とdetect
は常に単一のオブジェクトを返すか、何も一致しない場合は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]