我有一個簡單的問題。有沒有方法通過System.Collections.Generic.Dictionary
通過for
聲明在C#中輕鬆循環?通過語句環通過System.Collections.Generic.Dictionary
在此先感謝。
我有一個簡單的問題。有沒有方法通過System.Collections.Generic.Dictionary
通過for
聲明在C#中輕鬆循環?通過語句環通過System.Collections.Generic.Dictionary
在此先感謝。
不合理的方式,沒有。您可以使用 LINQ的擴展ElementAt
:
for (int i = 0; i < dictionary.Keys.Count; i++)
{
Console.WriteLine(dictionary.ElementAt(i).Value);
}
...但我真的不明白這一點。只需使用常規的foreach
方法即可。如果你因爲某些原因需要保持索引的軌道,而迭代,你可以做到這一點「就在身邊」:
int index = 0;
foreach (var item in dictionary)
{
Console.WriteLine(string.Format("[{0}] - {1}", index, item.Value));
// increment the index
index++;
}
可以使用的foreach:
Dictionary<string,string> dictionary = new Dictionary<string,string>();
// ...
foreach (KeyValuePair<string,string> kv in dictionary)
{
string key = kv.Key;
string value = kv.Value;
}
沒有,for
主要是爲了與指數的集合。但是,您可以很容易地將foreach
覆蓋在上面。
您可以遍歷所有的鍵
for(int i = 0; i < myDictionary.Keys.Length; ++i)
myDictionary.Keys[i] ...
或值
for(int i = 0; i < myDictionary.Values.Length; ++i)
myDictionary.Values[i] ...
以上二者的菲利普表示
這不會編譯'不能用[]索引到'System.Collections.Generic.Dictionary
他正在尋找:Count而不是Length,它只適用於'普通'數組 – Oxymoron 2010-01-20 08:39:29
@ Oxymoron:即使使用'Count',試圖通過索引('Keys [i]')訪問'Keys'集合中的元素仍然會破壞構建(這是我在我的評論中提到的錯誤)。 – 2010-01-20 08:46:46
如果您正在使用.NET 3.5或更高版本,那麼你可以使用LINQ和一個預定位來定位一個特定的值或值。 詞典不一定按順序存儲它們的KeyValue對(通過輸入順序或按鍵順序)。
有幾種方法。 循環通過按鍵:
foreach(var key in myDictionary.Keys)
通過價值循環:
foreach(var value in myDic.Values)
通過對循環:
foreach(KeyValuePair<K, V> p in myDic)
{
var key = p.Key;
var value = p.Value
}
菲利普拿到了它的foreach
,但我通常會簡化爲:
foreach (var pair in dictionary)
{
var key = pair.Key;
var value = pair.Value;
}
使用for
循環無法循環訪問這組鍵值對,因爲它們不是按順序存儲的。您可以循環使用鍵或值作爲集合。
它可以OFC可以做到,但它是一個有點傻IMO
Dictionary<string,string> dictionary = new Dictionary<string, string>();
Dictionary<string, string>.Enumerator enumerator = dictionary.GetEnumerator();
for (int i = 0; i < attributeValues.Count;i++)
{
KeyValuePair<string, string> current = enumerator.Current;
//do something usefull
enumerator.MoveNext();
}
此獲得的唯一的事情是一個(相當無用)指數,如果這是實際的目標,你可以更好地通過這樣的服務:
int currentIndex = 0;
foreach (KeyValuePair<string, string> keyValuePair in dictionary)
{
//do something usefull
currentIndex++;
}
如果它沒有成爲一個「爲「 - 圈,也許使用Dictionary.GetEnumerator Method用「而」 -loop是一種選擇 - 這是很容易的,以及恕我直言:
var enumerator = d.GetEnumerator();
while (enumerator.MoveNext())
{
var pair = enumerator.Current;
b += pair.Value;
}
enumerator.Dispose();
你爲什麼要用'foreach'做這個?此外,你不處理enumeartor。 – Servy 2014-12-05 16:11:38
代碼片段來自http://www.dotnetperls.com/dictionary-getenumerator,它不是我的代碼。根據該網站,使用枚舉器比'foreach'有更好的性能 - 這就是爲什麼我認爲值得一提的是枚舉器 – user4531 2014-12-08 09:52:48
不管它的代碼是否重要。這不是很好的代碼,你應該修復它,或者不要使用它。處理統計員是很重要的。如果你想明確枚舉,你需要這樣做。至於它比「foreach」更好,這正是「foreach」所要做的。 'foreach'只是語法糖(除了'foreach'正確,不像你的代碼)。 「foreach」不會變慢;它也在做同樣的事情。 – Servy 2014-12-08 15:15:09
什麼是你想要做的代碼片段?您是否在尋找特定的Value或KeyValue對? – ChrisBD 2010-01-20 08:25:27
我認爲你的意思是foreach而不是for? – 2010-01-20 08:25:40