我正在尝试在Ruby中找到特定字符串位于多维数组中的索引。我正在使用以下代码。
array = [['x', 'x',' x','x'],
['x', 'S',' ','x'],
['x', 'x','x','S']]
array.index(array.detect{|aa| aa.include?('S')}
但是,这只返回1(第一个索引)。有谁知道如何更改此命令以返回模式所在的所有索引?此示例应返回1和2.
答案 0 :(得分:2)
此处有更新的解决方案,您现在更新了问题并添加了以下注释:
array.each_index.select { |i| array[i].include?('S') }
#=> [1, 2]
答案 1 :(得分:0)
一种方式:
array = [['x', 'x',' x','x'],
['x', 'S',' ','x'],
['x', 'x','x','S']]
array.each_with_index.with_object([]) do |(row,i),arr|
j = row.index('S')
arr << i unless j.nil?
end
#=> [1, 2]
检索行索引和列索引只是一个很小的改动(假设每行最多有一个目标字符串):
array.each_with_index.with_object([]) do |(row,i),arr|
j = row.index('S')
arr << [i,j] unless j.nil?
end
#=> [[1, 1], [2, 3]]
您还可以使用Matrix类来获取行/列对。
require 'matrix'
Matrix[*array].each_with_index.with_object([]) { |(e,i,j),arr| arr << [i,j] if e == 'S' }
#=> [[1, 1], [2, 3]]