Ruby 中是否有一种方法与 find 相反?
a, b, c = 0, 1, 2
[a, b, c].find(&:zero?) # => 0
是否有任何方法可以找到块返回 false 的第一个元素?
[a, b, c].the_method(&:zero?) # => 1
换句话说,它的行为方式与以下内容相同:
[a, b, c].reject(&:zero?).first
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不是,但是你可以用干净的方式创建一个:
...或者可怕的方式-有趣的黑客方式:
...或者简洁但非常危险的方式:
但我建议跳过棘手的
Symbol#to_proc
用法并说出你想要的内容:There is not, but you could create one either the clean-ish way:
...or the horribly-amusing hack way:
...or the terse-but-terribly-dangerous way:
But I'd advocate just skipping the tricky
Symbol#to_proc
usage and saying what you want:如果您使用的是 Ruby 2.0,则可以执行
lazy.reject(&:zero?).first
,而不会因遍历整个数组而造成性能损失。If you're using Ruby 2.0, you may be able to do
lazy.reject(&:zero?).first
without the performance penalty of going through the full array.据我所知,没有一个标准方法可以做到这一点(假设 find_all 和拒绝相互引用,但 find 不引用任何内容)。如果你经常需要它(特别是如果拒绝太慢)你可以自己编写
As far as I can tell there is not a standard method to do this (given that find_all and reject reference each other, but find does not reference anything). If you need it frequently (especially if the reject is too slow) you can write your own