查看所有元素是否不为零的最短方法是什么?

发布于 2024-10-30 04:24:50 字数 79 浏览 5 评论 0 原文

有没有更直接的方法来做到这一点?

[1, nil, 2, 'a'].all? {|x| x}

Is there a more direct way to do this?

[1, nil, 2, 'a'].all? {|x| x}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

彩扇题诗 2024-11-06 04:24:50

使用 include? 并在开始:

![1, nil, 2, 'a'].include?(nil)

如果所有元素都非 nil,则数组不包含 nil。使用 .all? 意味着您必须扫描整个数组,.include? 应该在找到匹配项后立即停止,并且没有调用块的开销;因此, .include? 应该更快,但性能差异可能非常无关紧要,除非您有一个巨大的数组。我会选择最适合你的一种。

Use include? and add a "not" to the beginning:

![1, nil, 2, 'a'].include?(nil)

If all elements are non-nil then the array does not include nil. Using .all? means that you have to scan the entire array, .include? should stop as soon as it finds a match and there's no overhead of calling a block; so, .include? should be quicker but the performance differences will probably be pretty irrelevant unless you have a massive array. I'd go with whichever one reads best for you.

℡寂寞咖啡 2024-11-06 04:24:50

另一种可能性是任何?没有? 方法,以及使用 nil? 方法:

irb(main):005:0> [1, nil, 2, 'a'].any?(&:nil?)
=> true
irb(main):006:0> [1, nil, 2, 'a'].none?(&:nil?)
=> false

&:foo 语法可以替换以下内容: list.each() {|x| x.foo()}

Another possibility is the any? or none? methods, and using the nil? method:

irb(main):005:0> [1, nil, 2, 'a'].any?(&:nil?)
=> true
irb(main):006:0> [1, nil, 2, 'a'].none?(&:nil?)
=> false

The &:foo syntax works to replace anything like: list.each() {|x| x.foo()}

唱一曲作罢 2024-11-06 04:24:50

你在打高尔夫球吗?

这就是您所能得到的最简短和直接的内容。就我个人而言,我更喜欢一种稍微详细的方式:

[...].all? {|x| !x.nil? }

Are you playing Golf?

That's about as short and direct as you are gonna get. Personally I'd prefer a slightly more verbose way:

[...].all? {|x| !x.nil? }
李不 2024-11-06 04:24:50

我想你可以这样做::

!list.any?(&:nil?)

但我发现这比你原来的代码不太直接。不过,字符较少,如果您不喜欢块,这会将块隐藏在 &: 符号中

[好吧,您的原始代码有一个问题,即 {|x| x } 对于 nil 和 false 值都计算为 false。如果你真的想要块 {|x| !x.nil?} ]

I suppose you could do::

!list.any?(&:nil?)

But I find that less direct than your original code. Fewer characters, though, and if you dislike blocks this hides the block in the &:symbol

[Well, your original code has a problem which is that {|x| x } evaluates as false for both nil and false values. If you really want the block {|x| !x.nil?} ]

不寐倦长更 2024-11-06 04:24:50

几乎与 mu 相同,太短了,我不认为我的比它更好,但只是另一种变体:

![1, nil, 2, 'a'].index(nil)

Almost the same as mu is too short, and I don't think mine any better than it, but just another variant:

![1, nil, 2, 'a'].index(nil)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文