假设:
my_array = ['america', 'bombay', 'bostwana', 'cameroon']
我可以找到第一个元素的索引,例如,以'bo'
和
my_array.find_index { |l| l.start_with? 'bo' }
如何找到所有这些元素?
答案 0 :(得分:1)
您可以将map.with_index
与条件compact
结果一起使用。
my_array.map.with_index{ |element, index| index if element.start_with? 'bo' }.compact
<强>地图
map
将获取所有值,并将它们“映射”为每个项目传递到给定块时返回的值。
my_array.map { |element| element.start_with? 'bo' }
# => [false, true, true, false]
<强> with_index 强>
要获取索引值,您可以使用with_index
,如下所示:
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]
<强>紧凑强>
然后,要删除nil
值,可以在返回的数组上调用compact
。
my_array.map.with_index{ |element, index| index if element.start_with? 'bo' }.compact
# => [1, 2]
答案 1 :(得分:0)
如果你想要元素:
my_array.find { |element| element.start_with? 'bo' } # => "bombay"
my_array.select { |element| element.start_with? 'bo' } # => ["bombay", "bostwana"]
如果你想要指数:
my_array.index { |element| element.start_with? 'bo' } # => 1
my_array.map.with_index.select { |element, _| element.start_with? 'bo' }.map(&:last)
# => [1, 2]
答案 2 :(得分:0)
['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]
我发布了这个以显示很少使用的方法。 Enumerable#grep
接受任何内容,用于根据三次相等的案例比较选择项目。
传递Proc
个实例很酷,因为Proc
有一个默认的Proc#===
实现:它只是在接收器上调用。
答案 3 :(得分:0)
为了便于阅读,我将使用以下内容:
my_array.each_index.select {|idx| my_array[idx].start_with?("bo") }