You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby/Rails中定位数组中不匹配元素的索引?

Ruby/Rails 提取数组中不匹配元素的索引的最优实现

核心实现方案

直接利用Ruby的each_with_index枚举器,结合筛选和映射操作,就能高效完成需求。步骤如下:

  1. 取数组的第一个元素作为基准值(假设数组应全程保持该值)
  2. 遍历数组,筛选出值与基准不匹配的元素及其索引
  3. 提取这些元素的索引,组成结果数组

示例代码:

array = [1,1,1,1,3,1,1,1,2,1,1,1]
base_value = array.first
mismatched_indices = array.each_with_index.select { |val, idx| val != base_value }.map(&:last)
# 输出结果:[4, 8]

边界情况处理

为了让代码更健壮,建议先处理数组为空的场景:

def get_mismatched_indices(array)
  return [] if array.empty?
  
  base = array.first
  array.each_with_index.select { |val, idx| val != base }.map(&:last)
end

这个方法能覆盖以下场景:

  • 空数组:返回空数组
  • 所有元素均相同:返回空数组
  • 基准值为nil的数组:比如[nil, nil, "test", nil]会返回[2],符合预期

性能说明

该实现的时间复杂度为O(n),其中n是数组长度:

  • each_with_index.select遍历一次数组,筛选出不匹配项
  • map仅遍历筛选后的结果(数量远小于n)
    整体属于线性时间复杂度,是Ruby中处理这类需求的最优方式之一。

内容的提问来源于stack exchange,提问作者Jeremy Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:03:23