2013-07-04 127 views
1

我有這樣的循環,我想通過一本字典,其中的值以列表的形式值迭代找到一定值詞典列表迭代再次

Dictionary<int, List<int>> A = new Dictionary<int, List<int>>(); 

    foreach (var item in A[*key*].Values) 
      { 
       if (A[*key*].Values == *specified value*) 
       { 
        a = true; //a is bool variable a made 
       } 
      } 

這個心不是工作,和我不確定如何做到這一點

回答

2

您需要使用字典鍵搞定的int名單,INT這個名單上,你可以使用Enumerable.Contains

foreach (var item in A.Keys) 
{ 
    if (A[item].Contains(*specified value*)) 
    { 
     a = true; //a is bool variable a made 
    } 
} 

如果您不需要知道在哪個鍵下找到所需的值,則可以直接使用Dictionary.Values而不是使用鍵。

foreach (var list in A.Values) 
{ 
    if (list.Contains(*specified value*)) 
    { 
     a = true; //a is bool variable a made 
    } 
} 
+0

需要注意的是:Contains是區分大小寫的。 –

+0

+1我會直接跳過'A.Keys'然後'A [item]'查找,然後迭代'foreach(var列表中的A.Values){如果(list.Contains(* value *))...' –

+0

是的,如果在找到哪個值時不需要密鑰,那更好,更新我的答案,謝謝。 – Adil

0
foreach (var item in A[key].Values) 
{ 
    if (item == *specified value*) 
    { 
     a = true; //a is bool variable a made 
    } 
} 
1

如果你想有一個LINQ的解決方案:

bool a = A.Values 
    .SelectMany(list => list) 
    .Any(item => item == specifiedValue); 

或使用標準foreach循環:

bool a = false; 
foreach(var list in A.Values) 
{ 
    foreach(var item in list) 
    { 
     if (item == specifiedValue) 
     { 
      a = true; 
      break; 
     } 
    } 

    if (a) 
     break; 
} 

我假設你想打出來的循環,一旦你的」我找到了你的物品。當然,在這一點上,打破嵌套循環有點痛苦,但是圍繞這一點有一些簡單的方法(例如,將迭代移動到一個返回的方法或使用可怕的goto)。但是你也可以使用LINQ解決方案自從(IIRC)它本質上無論如何歸結爲相同嵌套的foreach結構。

+1

爲Linq回答和優化打破一次==真的投票。 – Jastill