如何获取具有多个值但 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],以获得准确的索引。
希望这对和我的问题相同的人有所帮助。
我有两个数组:
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],以获得准确的索引。
希望这对和我的问题相同的人有所帮助。