Arrays 如何使用regexp在Ruby数组中搜索多个元素
鉴于: 我可以找到第一个元素的索引,比如说,它以Arrays 如何使用regexp在Ruby数组中搜索多个元素,arrays,ruby,regex,search,Arrays,Ruby,Regex,Search,鉴于: 我可以找到第一个元素的索引,比如说,它以'bo'开头 my_array = ['america', 'bombay', 'bostwana', 'cameroon'] 如何找到所有这些元素?如果需要元素: my_array.find_index { |l| l.start_with? 'bo' } 如果需要索引: my_array.find { |element| element.start_with? 'bo' } # => "bombay" my_array.sele
'bo'
开头
my_array = ['america', 'bombay', 'bostwana', 'cameroon']
如何找到所有这些元素?如果需要元素:
my_array.find_index { |l| l.start_with? 'bo' }
如果需要索引:
my_array.find { |element| element.start_with? 'bo' } # => "bombay"
my_array.select { |element| element.start_with? 'bo' } # => ["bombay", "bostwana"]
您可以将
map.with_index
与条件和compact
结果一起使用
my_array.index { |element| element.start_with? 'bo' } # => 1
my_array.map.with_index.select { |element, _| element.start_with? 'bo' }.map(&:last)
# => [1, 2]
这是怎么回事 地图 将获取所有值,并将它们“映射”到每个项传递到给定块时返回的值
my_array.map.with_index{ |element, index| index if element.start_with? 'bo' }.compact
与_索引一起
要获取索引值,可以使用以下方法:
my_array.map { |element| element.start_with? 'bo' }
# => [false, true, true, false]
紧凑型
然后,要去除nil
值,可以调用返回的数组
my_array.map.with_index { |element, index| index }
# => [0, 1, 2, 3]
my_array.map.with_index { |element, index| index if element.start_with? 'bo' }
# => [nil, 1, 2, nil]
我发布这篇文章是为了展示很少使用的方法。接受用于基于三重等号大小写比较选择项目的任何内容
在那里传递
Proc
实例很酷,因为Proc
有一个默认实现:它只是在接收方上被调用。为了可读性,我会使用以下方法:
['america', 'bombay', 'bostwana', 'cameroon']
.each_with_index # to get indices
.grep(->(e) { e.first.start_with? "bo" }) # I ❤ Enumerable#grep
.map(&:last) # get indices
#⇒ [1, 2]
谢谢,ndn。天哪,这(所有索引返回实现)看起来很可怕如果你认为我的问题值得的话,我可以请你投票支持我的问题吗?这里完全没有人(以防你没有意识到)。谢谢。它需要临时的局部变量2。它在每个迭代3上执行冗余的二次查找。事实上有3种方法。@mudasobwa,我数了4,n'est-ce pas?@CarySwoveland,我数了点<代码>数组#[]在前一项中被责骂:)你们两个都遗漏的关键词是“链”。我宁愿在每次迭代中进行一次“冗余”查找,也不愿在数据上迭代两次。不管怎样:可读性。因为可读性虽然重要,但不是唯一重要的因素,而且因为一旦我开始思考,我就无法抗拒,所以我以答案为基准:棒极了!斯科特,非常感谢你一步一步来。非常感谢!你对@davidhu2000现在被删除的答案的最后评论(“我需要投票,所以如果你认为这是值得的,请把问题投上去。”)类似于“我需要一个“A”,所以如果你认为我值得,请给我一个”。不要乞求,这是不合适的。如果您只需要元素而不是它们的索引,那么
my\u array.grep(/^bo/)
就足够了。
['america', 'bombay', 'bostwana', 'cameroon']
.each_with_index # to get indices
.grep(->(e) { e.first.start_with? "bo" }) # I ❤ Enumerable#grep
.map(&:last) # get indices
#⇒ [1, 2]
my_array.each_index.select {|idx| my_array[idx].start_with?("bo") }