7

我有一个:

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());

如何在不知道密钥的情况下循环遍历项目?

例如我想获取item[0]的值

如果我做:

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

7 回答 7

8

如何在不知道密钥的情况下循环遍历项目?

例如,我想获取item[0]

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

你可以因为 aDictionary<string, string>IEnumerable<KeyValuePair<string, string>>隐含的。只需使用FirstFirstOrDefault

string valueAtFirstPosition = selectedDates.First().Value; 

但是,请注意,字典并不意味着用作有序集合。它是一个集合,可用于通过键快速查找值。但是你无论如何都可以枚举它。

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

您根本不应该依赖该命令。我认为在当前的实现中,只要您不删除项目,订单就很稳定。

阅读:为什么字典“未排序”?

于 2014-07-28T14:14:47.600 回答
2

尝试这个

  foreach (string key in selectedDates.Keys)
  {
        var item = selectedDates[key]; 
  }
于 2014-07-28T14:14:44.220 回答
1

让我为你整理两件事。首先,您可以循环或使用 LINQ 访问元素,就像您也可以在列表中执行此操作一样:

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 中的ADictionary哈希表数据结构的实现(树映射是另一种映射实现)。

于 2014-07-28T14:23:40.973 回答
1

尝试这个 :

foreach(var key in selectedDates.Keys)
{
    var value = selectedDates[key];
}
于 2014-07-28T14:14:35.770 回答
1

这很简单,用 or 循环遍历它foreach以获得特定的索引:

var date = selectedDates.ElementAt(0).Value;
于 2014-07-28T14:17:05.507 回答
0

使用这个重载Where

var result = selectedDates.Where((d,i)=>i==0);
于 2014-07-28T14:13:56.563 回答
0

尝试:

foreach (var date in selectedDates)                
{                  
    var item = date.Value;              
}
于 2014-07-28T14:14:19.690 回答