我有一个数组,应该包含相同的值,如果有不匹配,我想拉这些不匹配的索引.

例如:

[1,1,1,1,3,1,1,1,2,1,1,1]

输出:

[4, 8]

在Ruby/Rails中实现这一点的最佳方式是什么?

推荐答案

你可以通过tallymax_by获得最常见的元素:

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,否则将被丢弃)

Ruby-on-rails相关问答推荐

GO AES GCM加密在解密时出错&S

使用ActiveSupport::TimeWithZone将UTC转换为用户定义的时区

如何将 ActionController::RoutingError 分类为 Sentry 中的错误

Rails ActiveRecord::LogSubscriber 不输出详细查询日志(log)

微软安全链接在页面加载前解锁用户

多行与内联块之间的不同行为

Rails - 如何从模型中查询 has_many

在单个继承表和另一个表中的类之间建立多对多关联

你如何发布到 Capybara 中的 URL?

$redis 全局变量与 ruby​​ on rails

如何从 Rails 路由中删除控制器名称?

如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?

为什么我要使用 unicorn 或 thin 而不是 WEBrick 用于开发目的?

Rails:仅当值存在时如何验证格式?

验证一个对象是否有一个或多个关联对象

rails structure.sql和schema.rb有什么区别

Rails 控制台中手动更新属性值的验证问题

设计/Rails - 如何删除特定的 Flash 消息? (登录成功)

如何一次显示一条 Ruby on Rails 表单验证错误消息?

Rails - 邮件,将正文作为纯文本获取