如何扫描一个数组中除了一个索引以外的所有元素?

3
我正在使用Ruby 2.4。如何扫描数组中除一个索引之外的每个元素以满足某个条件?我尝试过以下代码:
arr.except(2).any? {|str| str.eql?("b")}

但是遇到了以下错误:
NoMethodError: undefined method `except' for ["a", "b", "c"]:Array

但显然,我在网上阅读关于“except”(除外)的内容被夸大了。

1
你读到了哪里关于except的内容?Ruby数组没有这样的方法。此外,在字符串上调用.eql?并不是非常惯用;你可以直接使用str == "b" - Mark Reed
我找到了一篇帖子,其中有人自己定义了这样的方法,但即使在那里,它也是基于元素的值而不是索引。 - Mark Reed
1
这是吗? :) - Andrey Deineko
@MarkReed,考虑到大多数语言使用某种形式的 ==eql 是否是 Ruby 中惯用的呢?它也更像自然语言的阅读方式。 - max pleaner
1
.eql? 明显是 Ruby 的一部分,但在 Ruby 代码中使用它来比较字符串并不是典型的做法 - 这就是我所说的“惯用 Ruby”的意思。只要被比较的两个对象都是字符串,eql?===== 都会执行相同的比较。由于比其他任何操作符更多的语言使用 == 进行比较,因此通常被认为是最自然的选择。 - Mark Reed
1个回答

4
arr.reject.with_index { |_el, index| index == 2 }.any? { |str| str.eql?("b") }

说明:

arr = [0, 1, 2, 3, 4, 5]
arr.reject.with_index { |_el, index| index == 2 }
#=> [0, 1, 3, 4, 5]

简化你正在进行的操作:

arr.reject.with_index { |_el, index| index == 2 }.grep(/b/).any?
#=> true

根据@Cary的评论,另一个选项是:

arr.each_with_index.any? { |str, i| i != 2 && str.eql?("b") }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接