我想得到存储在数组中的对象每次出现的坐标如果我有一个数组:

array = [["foo", "bar", "lobster"], ["camel", "trombone", "foo"]]

一个对象,我想得到:
[[0,0], [1,2]]

以下几点可以做到这一点,但这是精心设计和丑陋的:
array.map
.with_index{
  |row,row_index| row.map.with_index {
    |v,col_index| v=="foo" ? [row_index,col_index] : v
  }
}
.flatten(1).find_all {|x| x.class==Array}

有没有更直截了当的方法?这是asked之前,并产生了一个类似的不雅的解决方案。

最佳答案

这里有一个稍微优雅一点的解决方案我有:
在结尾使用flat_map而不是flattening
使用.each_index.select而不是.map.with_index,然后必须在末尾剥离非数组,这真的很难看
添加缩进

array.flat_map.with_index {|row, row_idx|
  row.each_index.select{|i| row[i] == 'foo' }.map{|col_idx| [row_idx, col_idx] }
}

关于ruby - 获取二维数组中值的坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25816978/

10-11 23:03
查看更多