我有两个数组:
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"
,因此会返回第一个结果。我希望返回值为"8"
,但由于存在第一个"d"
,因此会返回"6"
的值。
有没有其他方法可以做到这一点?
答案 0 :(得分:1)
我不确定为什么此时将数组转换为字符串。如果你在它们仍处于数组形式时进行了这种比较,你可以做这样的事情,如果你想要返回第一个不匹配的值:
actual.each_with_index |char, idx|
if char != expected1[idx]
return idx
end
end
如果您想要返回不匹配值的列表,您可以执行以下操作:
wrong_value_indices = []
actual.each_with_index |char, idx|
if char != expected1[idx]
wrong_value_indices << idx
end
end
return wrong_values_indices
&#39;返回&#39;当然是可选的。这可能不是完美的Ruby风格,但它应该有助于说明解决方案模式。 Here是Enumerable#each_with_index文档的链接。希望这有帮助!
编辑:在字符串形式中,您可以拥有外部索引。再一次,我知道这是一个非常符合玩具的代码,但如果您只是想要解决您所要求的问题......
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
答案 1 :(得分:1)
经过进一步研究,下面的代码有效:
diff = []
actual[row_num].join(",").scan(actual[row_num][col_num]) do |c|
diff << [c, Regexp.last_match.offset(0).first]
end
我将此应用于我的代码逻辑。我首先使用JOIN(包括逗号)将Array转换为String。并扫描每个ROW&amp;列中。
然后我将每个结果称为 diff.last [1] ,以获得准确的INDEX。
希望这可以帮助某人和我的问题一样。