查找列表中的冲突

本文关键字:冲突 列表 查找 | 更新日期: 2023-09-27 18:10:11

我在逻辑和映射两个不同的表时遇到了这个问题。向用户展示一个表,供他们从中选择项目。然后我们需要将他们的选择映射到一个更大的系统可识别项目列表中。有些系统项是用户项的组合。

用户项=
关键字|项目
1 | A
2 | B
3 | C
4 | D
5 | E
6 | F

System Items =
SystemCode | UserItemsMapping
EG1 | 1
EG2 | 2
EG3 | 1,2
EG4 | 1,3
EG5 | 2,3
EG6 | 4
EG7 | 5
EG8 | 5,6
EG9 | 3
EG10| 4,5,6

所以如果用户输入A, B, C, D, E, F [= 1, 2, 3, 4, 5, 6 in keys]作为他们的输入。系统应该能够确定冲突的映射。

选定项目A, b &C有冲突,请从以下选项中选择:
EG3 (1,2) + EG9(3)或
EG4 (1,3) + EG2(2)或
EG5 (2,3) + EG1 (1)

选定项目D, E &F有冲突,请从以下选项中选择:
EG8 (5,6) + EG6(4)或
EG10(4、5、6)

这些都是在c#中使用List和自定义类来完成的,例如List和List。

编辑:所以我要做的是:
1)获取包含任何用户项的所有系统代码。
2)所有包含多个用户项的系统代码放到一个列表中。所有的组合代码转到另一个。
3)循环组合列表,如果一个用户项目与多个系统代码相冲突,将其添加到冲突列表中。

现在我有了一个冲突列表,像这样:

(代码)

public class ConflictSets 
{
   public List<SystemCodes> SystemCodesList {set; get;}
   public List<int> UserCodesList {set; get;}
}
public class SystemCodes
{
   public string Code {set; get;}
   public string UserItems {set; get;}
}
(/代码)

问题是,我的列表ConflictSetsList只有对冲突在它。对于上面的例子:
ConflictSetsList[0]。SystemCodesList[0] = EG3
ConflictSetsList[0]。SystemCodesList[1] = EG4
ConflictSetsList[1]。SystemCodesList[0] = EG3
ConflictSetsList[1]。SystemCodesList[1] = EG5
ConflictSetsList[2]。SystemCodesList[0] = EG4
ConflictSetsList[2]。SystemCodesList[1] = EG5

我真正想要的是这样的类:
ConflictSetsList [0] .Options[0]。SystemCodesList[0] = EG3
ConflictSetsList [0] .Options[0]。SystemCodesList[1] = EG9
ConflictSetsList [0] .Options[1]。SystemCodesList[0] = EG4
ConflictSetsList [0] .Options[1]。SystemCodesList[1] = EG2
ConflictSetsList [0] .Options[2]。SystemCodesList[0] = EG5
ConflictSetsList [0] .Options[2]。SystemCodesList[1] = EG1

这样更有意义吗?对不起,我不太擅长解释这个。

这是来自以下输入的数据:
dtSystemCodes = new DataTable。Where Row["UserInputKeys"] = xx|yy
dtUserItems = new DataTable。Where Row["Key"] = xx
List inKeys = new List() {1,2,3,4,5,6};

谢谢。

查找列表中的冲突

最简单的解决方案是创建一个2d bool数组,其中所有映射的长度为[1 + 2^示例数,示例数]

valid  EG1 EG2 EG3 ... EG10 
0       0  0    0       0    
1       0  0    0       1
        ...
1       1  1    1       1

(0 = false, 1 = true)在for循环中,测试每一行的有效性,并将结果放在第一列中第一列是所有可能的映射模式