c# Dictionary,C# 中,不知道key如何通过items循环

c# Dictionary<string,string> how to loop through items without knowing key

本问题已经有最佳答案,请猛点这里访问。

我有一个:

1
2
3
4
5
var selectedDates = new Dictionary<string, string>();
selectedDates.Add("2014-06-21", DateTime.Now.ToLongDateString());
selectedDates.Add("2014-07-21", DateTime.Now.AddDays(5).ToLongDateString());
selectedDates.Add("2014-08-21", DateTime.Now.AddDays(9).ToLongDateString());
selectedDates.Add("2014-09-21", DateTime.Now.AddDays(14).ToLongDateString());

我怎么能在不知道钥匙的情况下循环物品?

For example I want to get the value of the item[0]

如果我这样做:

1
var item = selectedDates[0].value; // I get an error


How can I loop trough items without knowing the key?

For example I want to get the value of the item[0]

您想将字典视为类似于列表或数组的(已排序)集合,并获取其中的第一项吗?

你可以这样做,因为Dictionary是一个隐含的IEnumerable>。只需使用FirstFirstOrDefault即可:

1
string valueAtFirstPosition = selectedDates.First().Value;

但是,请注意,字典并不打算用作有序集合。它是一个集合,可用于通过键快速查找值。但你还是可以把它列举出来。

1
2
3
4
foreach(KeyValuePair<string, string>keyVal in selectedDates)
{
    Console.WriteLine("Key: {0} Value: {1}", keyVal.Key, keyVal.Value);
}

你不应该仅仅依靠那个命令。我认为在当前的实现中,只要不删除项,顺序就稳定了。读

阅读:为什么字典是"未排序"?


试试这个

1
2
3
4
  foreach (string key in selectedDates.Keys)
  {
        var item = selectedDates[key];
  }


让我给你做两件事。首先,可以循环或使用LINQ访问元素,就像在列表中一样:

1
2
3
4
5
6
7
8
9
10
11
var dict = new Dictionary<string, string>();

// loop
foreach (var item in dict)
{
    var key = item.Key;
    var value = item.Value;
}

//"first" (see below)
var firstItem = dict.First();

但是,请注意,您所指的第一个项目几乎可以是Dictionary中的任何项目。字典以任何便于查找的顺序存储元素(集也是如此)。

这种顺序在某些实现中是已知的,但当元素的顺序很重要时,列表或数组可能更适合。.NET中的Dictionary是哈希表数据结构的实现(树映射是另一个映射实现)。


它很简单,用一个foreach循环它,或者得到一个特定的索引:

1
var date = selectedDates.ElementAt(0).Value;

试试这个:

1
2
3
4
foreach(var key in selectedDates.Keys)
{
    var value = selectedDates[key];
}


尝试:

1
2
3
4
foreach (var date in selectedDates)                
{                  
    var item = date.Value;              
}


使用此Where过载:

1
var result = selectedDates.Where((d,i)=>i==0);