给定一个数组,如何找到与给定条件匹配的元素的所有索引?

例如,如果我有:

arr = ['x', 'o', 'x', '.', '.', 'o', 'x']

要找到项目为x的所有索引,我可以:

arr.each_with_index.map { |a, i| a == 'x' ? i : nil }.compact   # => [0, 2, 6]

(0..arr.size-1).select { |i| arr[i] == 'x' }   # => [0, 2, 6]

有没有更好的方法来实现这一点?

推荐答案

Ruby 1.9:

arr = ['x', 'o', 'x', '.', '.', 'o', 'x']
p arr.each_index.select{|i| arr[i] == 'x'} # =>[0, 2, 6]

Code

Ruby相关问答推荐

Ruby - 使用索引值识别和更新数组中的重复项

这个#divmod 方法输出这个结果是做什么的?

重写 Enum#inject 以在 Ruby 中将符号作为参数

如何从外部获取给定 lambda 的参数值,而不显式返回其绑定?

使用 Ruby 将文件从一个目录复制到另一个目录

Coffeescript 中等效的 Ruby .times

Ruby 连接字符串并添加空格

Ruby 中的 Fail vs. raise:我们真的应该相信风格指南吗?

Rails 在最后一个之前加入逗号和and的字符串列表

Ruby 与计算机科学相关的 yield 特性

从类对象获取类位置

从 Ruby 中的 URL 获取文件名的好方法是什么?

如何让 Ruby 1.9 成为 Ubuntu 上的默认 Ruby?

Ruby 1.9 哈希,键中有破折号

如何使用 Nokogiri 删除 node ?

创建一个接受参数散列的 ruby​​ 方法

判断ruby中的字符长度

使用 Ruby CSV 在导出的 CSV 中更改字段分隔符/分隔符

如何在 Ruby 中获取堆栈跟踪对象?

何时使用在 Ruby 中启动子进程的每种方法