1. ホーム
  2. ruby

[解決済み] Ruby Detect方式

2022-02-07 21:46:42

質問

セレクトは理にかなっている。しかし、誰か.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

戻り値 3 という式に対して TRUE を返すリストの最初の項目だからです。 x.between?(3,4) .

detect は、条件が初めて真を返した後、反復処理を停止します。 select は入力リストの最後に到達するまで繰り返し処理を行い、ブロックが真を返したすべての項目を返します。