如何获取具有多个值但 return 单个结果的索引

How to get index with multiple values but return single result

我有两个数组:

expected = ["a", "b", "c", "d", "e", "f", "g"]
actual = ["a", "b", "c", "d", "d", "g", "g"]

我像这样将两者都转换为字符串:

expected1 = "a,b,c,d,e,f,g"
actual1 = "a,b,c,d,d,g,g"

我会比较每个值是否相同,例如:expected1[0] == actual1[0]expected1[1] == actual[1]等。如果它们不一样,我喜欢从实际中获取文件的索引。在这种情况下,它在 expected1[4]actual[4] 上不相等,因为值是 "e""d"

我做了 actual1.index(actual[4]),但由于值是 "d",第一个结果将是 returned。我希望 return 的值为 "8",但由于存在第一个 "d",它会 return 的值为 "6"

有其他方法吗?

我不确定你为什么此时将数组转换为字符串。如果您在它们仍处于数组形式时进行此比较,您可以这样做,如果您想 return 第一个 不匹配的值:

actual.each_with_index |char, idx|
  if char != expected1[idx]
    return idx
  end
end

如果你想要return一个列表不匹配的值,你可以这样做:

wrong_value_indices = []

actual.each_with_index |char, idx|
  if char != expected1[idx]
    wrong_value_indices << idx
  end
end

return wrong_values_indices

'return'当然是可选的。这可能不是完美的 Ruby 风格,但它应该有助于说明解决方案模式。 Here 是 Enumerable#each_with_index 文档的 link。希望这对您有所帮助!

编辑:在字符串形式中,您可以有一个外部索引。再一次,我知道这是非常玩具式的代码,但如果你只是想要任何解决方案来解决你的问题......

idx = 0
actual1.each_char |char|
  if char != expected1[idx]
    return idx
  end
  idx += 1
end

wrong_value_indices = []

idx = 0
actual.each_char |char|
  if char != expected1[idx]
    wrong_value_indices << idx
  end
  idx += 1
end

return wrong_values_indices

经过进一步研究,下面的代码有效:

diff = []

actual[row_num].join(",").scan(actual[row_num][col_num]) do |c|

  diff << [c, Regexp.last_match.offset(0).first]   

end

我将其应用于我的代码逻辑。我首先使用包含逗号的 JOIN 将数组转换为字符串。并扫描每一行和每一列。

然后我将每个结果称为 diff.last[1],以获得准确的索引。

希望这对和我的问题相同的人有所帮助。