【发布时间】:2025-12-10 02:40:01
【问题描述】:
给出一个结果,我需要和表做一个匹配,考虑优先级,假设如下表:
+---+---+
| A | B |
+---+---+
| 1| 1|
+---+---+
| 1| 0|
+---+---+
| 0| 1|
+---+---+
给出一个包含两行的结果集合:
[[A => 1, B => 1], [A => 0, B => 1]]
或
[[A => 0, B => 1], [A => 1, B => 1]]
匹配的结果是[A => 1, B => 1],因为是和表的第一项匹配的结果。
我找到的唯一方法是:
getMatchingResult (result) {
first = null;
second = null;
third = null;
//fill each case if exists
foreach (result as r) {
if (r.A && r.B) {
first = r;
}
if (r.A && !r.B) {
second = r;
}
if (!r.A && r.B) {
third = r;
}
}
//handle priority
if (first)
return first;
else if (second)
return second
else if (third)
return third;
return false;
}
getMatchingResult([[A => 0, B => 1], [A => 1, B => 1]]);
// [A => 1, B => 1]
getMatchingResult([[A => 1, B => 1], [A => 0, B => 1]]);
// [A => 1, B => 1]
有没有更好的方法来做到这一点?或者是否有一些算法可以解决这些类型的问题?
谢谢!
【问题讨论】:
-
在第一次迭代期间,如果匹配或不匹配,该算法将终止。我看不到“优先级”是如何处理的。 - 此外,不清楚什么应该与结果集合行中的那么多 A 和 B 匹配。请澄清一下。
-
感谢@laune 的帮助,我修正了我的错误逻辑
-
[[A => 1, B => 1], [A => 0], [B => 1]] - 这对于 r.A 和 r.B 意味着什么?我不明白最后 4 行应该是什么意思。
-
@laune 我更新了代码 [[A => 0, B => 1], [A => 1, B => 1]] 我们可以将其视为一个对象数组,所以第一个是 r1.A = 0,r1.B = 0,第二个是 r2.A = 1 和 r2.B = 1,所以我们有一个对象数组 [r1, r2] 现在可以了吗?谢谢!