idols = ['Mahatma Gandhi', 'Martin Luther King Jr', 'George Costanza', 'Nancy Wake', 'George Costanza', 'John Howard Griffin', 'George Costanza']
我想发出idols.indexes('George Costanza')
并获得结果[2, 4, 6]
- 我的偶像是George Costanza的每个位置。
有没有高效或内置的方法来做到这一点?
答案 0 :(得分:1)
我想,我不知道这样做的任何内置方式,但你可以只用map.with_index
来做。
def mul_indexes(arr,val)
arr.map.with_index { |v, i| i if v == val }.compact
end
现在,您可以使用mul_indexes(idols, 'George Costanza')
。另外,如果您打算经常使用它,最好将其设为Array#mul_indexes
答案 1 :(得分:1)
使用单例方法的另一种解决方案:
def idols.mul_indexes
each_with_index.inject([]) {|m,(e,i)| count(e) > 1 ? m + [i] : m}
end
idols.mul_indexes # [2, 4, 6]
答案 2 :(得分:0)
另一种方式:
def indexes(arr, match)
arr.each_index.select { |i| arr[i] == match }
end
indexes(idols,'George Costanza')
#=> [2,4,6]
我强烈建议不要使用猴子修补Array
这个简单的方法。
答案 3 :(得分:0)
您始终可以扩展Array类以实现该功能
class Array
def find_indexes(value)
indexes = []
self.each_with_index do |item,index|
indexes << index if item == value
end
return indexes
end
end
然后就这样做:idols.find_indexes('George Costanza')