2014-06-24 32 views
-3

我有這個邏輯問題和映射兩個不同的表。向用戶呈現一張表格供他們從中選擇項目。然後,我們需要將他們的選擇映射到更大的系統識別項目列表。某些系統項目是用戶項目的組合。查找列表中的衝突

用戶項目=
關鍵字|商品號
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]。系統應該能夠確定衝突的映射。

選定項目A,B &Ç有衝突,請從以下中選擇:
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#中使用列表和內容的自定義類來完成的,e,g 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]可供選項[0] .SystemCodesList [0] = EG3
ConflictSetsList [0]可供選項[0] .SystemCodesList [1] = EG9
ConflictSetsList [0] .Options [1] .SystemCodesList [0] = EG4
ConflictSetsList [0]可供選項[1] .SystemCodesList [1] = EG2
ConflictSetsList [0]可供選項[2] .SystemCodesList [0] = EG5
ConflictSetsList [0]可供選項[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};

謝謝。

+1

問題是什麼?你嘗試了什麼? –

+0

問題是我不知道如何從邏輯上完成列表。我試過的是這樣的:獲取所有系統項,循環遍歷並找到所有具有關聯用戶輸入密鑰的代碼。然後通過該列表並將所有組合添加到單獨的類。我想要另一個名爲ConflictSets的類來列出所有受影響的衝突及其相關的系統代碼。 – user3769327

+2

通過編輯您的問題來顯示您嘗試過的內容。 – allonhadaya

回答

0

最簡單的解決方案將是使與lenght的所有映射一個2D布爾陣列[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列中你有所有可能的映射關係列表