具有条件的数组的第一个元素

Bal*_*ard 56 ruby arrays

是否有更短的方法来找到满足某些条件的数组中的第一个元素:

my_array[ my_array.index {|x| x.some_test} ]
Run Code Online (Sandbox Code Playgroud)

Ser*_*sev 98

试试这个:

my_array.find{|x| x.some_test }
Run Code Online (Sandbox Code Playgroud)

或者这是一个快捷方式(感谢@LarsHaugseth提醒它)

my_array.find(&:some_test)
Run Code Online (Sandbox Code Playgroud)

  • 可以缩写为`my_array.find(&:some_test)` (3认同)

sar*_*ana 5

对我来说,听起来很令人困惑。因为我期望收到不止一个对象来满足这样的请求。

\n

我更喜欢用它detect来获得独特的效果。

\n

select找到所有这些。

\n

ruby 文档介绍了它们:

\n
detect(ifnone = nil) {|obj| block } \xe2\x86\x92 obj or nil click to toggle source \nfind(ifnone = nil) {|obj| block } \xe2\x86\x92 obj or nil \ndetect(ifnone = nil) \xe2\x86\x92 an_enumerator \nfind(ifnone = nil) \xe2\x86\x92 an_enumerator\n
Run Code Online (Sandbox Code Playgroud)\n

将枚举中的每个条目传递给块。返回第一个不为 false 的块。如果没有对象匹配,则调用 ifnone 并在指定时返回其结果,否则返回 nil。

\n
find_all {|obj| block } \xe2\x86\x92 array click to toggle source\nselect {|obj| block } \xe2\x86\x92 array\nfind_all \xe2\x86\x92 an_enumerator\nselect \xe2\x86\x92 an_enumerator\n
Run Code Online (Sandbox Code Playgroud)\n

返回一个数组,其中包含 block 不为​​ false 的 enum 的所有元素

\n

  • 对我来说,“检测”听起来根本不是一个正确的方法。“find”至少可以“找到”并返回一些东西。“检测”的作用和返回内容 - 如果不查阅文档,我不知道。 (6认同)
  • 当您处理活动记录对象等时,“检测”非常有用(其中“查找”被覆盖并执行数据库查询) (4认同)