我有一个简单的问题。有没有方法通过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