39

選択は理にかなっています。しかし、誰かが私に .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]
4

4 に答える 4

81

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

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

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

detect条件が最初に true を返した後、反復を停止します。select入力リストの最後に到達するまで反復し、ブロックが true を返したすべての項目を返します。

于 2010-06-07T03:00:35.040 に答える
11

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
于 2010-06-07T03:04:43.960 に答える
5

ruby-docs は、メソッドについて学びたい場合の優れたリソースです。

列挙可能#検出

于 2010-06-07T03:05:36.253 に答える
4

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

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

find_allselect一致することがわかったものの配列を返します。

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

参照リンク

于 2016-03-29T00:58:31.047 に答える