我有一个数组,应该包含相同的值,如果有不匹配,我想拉这些不匹配的索引.
例如:
[1,1,1,1,3,1,1,1,2,1,1,1]
输出:
[4, 8]
在Ruby/Rails中实现这一点的最佳方式是什么?
我有一个数组,应该包含相同的值,如果有不匹配,我想拉这些不匹配的索引.
例如:
[1,1,1,1,3,1,1,1,2,1,1,1]
输出:
[4, 8]
在Ruby/Rails中实现这一点的最佳方式是什么?
arr = [1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1]
most_common = arr.tally.max_by(&:last).first
#=> 1
tally
返回包含每个元素出现次数的散列({1=>10, 3=>1, 2=>1}
),max_by(&:last)
返回出现次数最多的元素对,first
返回该元素的值.(假设总有one个最常见的元素)
要获得这些指数,您可以使用filter_map
:
arr.each_with_index.filter_map { |e, i| i if e != most_common }
#=> [4, 8]
each_with_index
会生成每个元素及其对应的索引.filter_map
从块中 Select 真实结果,如果元素不等于1
,则块返回元素的索引.(以及nil
,否则将被丢弃)