c#Dictionary <string,string>如何在不知道键的情况下遍历项目</string,string>

时间:2014-07-28 14:12:23

标签: c# idictionary

我有一个:

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

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

  

例如,我想获得项目[0]

的值

如果我这样做:

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

7 个答案:

答案 0 :(得分:7)

  

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

     

例如,我想获得item[0]

的值

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

您可以因为Dictionary<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);
}

你应该完全不依赖那个命令。我认为在当前的实现中,只要您不删除项目,订单就是稳定的。 Read

阅读:Why is a Dictionary “not ordered”?

答案 1 :(得分:2)

试试这个

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

答案 2 :(得分:1)

试试这个:

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

答案 3 :(得分:1)

很简单,使用foreach循环播放或获取特定索引:

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

答案 4 :(得分: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中的Dictionaryhash table data structure的实现(树图是另一个地图实现)。

答案 5 :(得分:0)

使用Where的重载:

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

答案 6 :(得分:0)

尝试:

foreach (var date in selectedDates)                
{                  
    var item = date.Value;              
}