我有逻辑和映射两个不同表的这个问题。向用户呈现一个表以供他们从中选择项目。然后,我们需要将他们的选择映射到更大的系统识别项列表。某些系统项是用户项的组合。
用户物品=
钥匙|项目
1 | A
2 | B
3 | C
4 | D
5 | E
6 | F
系统项目=
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]作为输入。系统应该能够确定冲突的映射。
选定项目 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#中使用列表和表内容的自定义类完成的,例如,列表和列表。
编辑:
所以我设法做到的是:
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;}
}
[/代码]
问题是我的List 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。行[&#34; UserInputKeys&#34;] = xx | yy
dtUserItems =新的DataTable。行[&#34;键&#34;] = xx
列出inKeys = new List(){1,2,3,4,5,6};
谢谢。
答案 0 :(得分:0)
最简单的解决方案是制作一个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 =假,1 =真) 在for循环中测试每一行的有效性,并将结果放在fisrt列中 然后在fisrt列中,您有所有可能的映射shemes的列表