c#Dictionary<string,string>如何在不知道键的情况下遍历项目[重复]
Posted
技术标签:
【中文标题】c#Dictionary<string,string>如何在不知道键的情况下遍历项目[重复]【英文标题】:c# Dictionary<string,string> how to loop through items without knowing key [duplicate] 【发布时间】:2014-09-19 18:08:43 【问题描述】:我有一个:
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
【问题讨论】:
你希望第一个项目是什么? 那为什么要使用字典呢?数组或列表不能完成这项工作吗? 如果您不知道如何遍历字典,或者您在不知道键值的情况下引用字典中的特定条目时遇到问题,能否解释一下? 【参考方案1】:如何在不知道密钥的情况下循环遍历项目?
例如我想获取
item[0]
的值
您希望将字典视为类似于列表或数组的(有序)集合并获取其中的第一项?
您可以,因为 Dictionary<string, string>
隐含地是 IEnumerable<KeyValuePair<string, string>>
。只需使用First
或FirstOrDefault
:
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”?
【讨论】:
谁赞成这个? “如何遍历项目”,你说“先使用”?这个答案是错误的 @AndreasMüller:我将“item[0]”理解为“给我第一个项目”,将“循环槽项目”理解为“将其用作收藏”。 @TimeSchmelter 问题要求其他内容。 using [0] 是OP表达他不知道如何使用字典并且拒绝阅读msdn api的方式 @AndreasMüller:你怎么知道? OP 试图找到0
(int
) 作为关键,即使他添加了DateTime
s(如string
)?他想要第一个不是更不可能吗?
他正在添加字符串键并希望索引器使用整数。不,如果您使用的字典不是您想要的。如果他想要第一个项目,他希望会使用列表来代替【参考方案2】:
让我为你整理两件事。首先,您可以循环或使用 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 中的 Dictionary
是 hash table data structure 的实现(树形图是另一种映射实现)。
【讨论】:
【参考方案3】:很简单,使用foreach
循环遍历它或获取特定索引:
var date = selectedDates.ElementAt(0).Value;
【讨论】:
【参考方案4】:试试这个
foreach (string key in selectedDates.Keys)
var item = selectedDates[key];
【讨论】:
虽然这是一种有趣的方法,但是 foreach(var v in sselectedDates) var date = v.Value; 不是更好吗?【参考方案5】:试试这个:
foreach(var key in selectedDates.Keys)
var value = selectedDates[key];
【讨论】:
正如文森特已经在 nsgocev 的回答中评论的那样:“foreach(var v in sselectedDates) var date = v.Value; 会不会更好?”跨度> 【参考方案6】:试试:
foreach (var date in selectedDates)
var item = date.Value;
【讨论】:
【参考方案7】:使用Where
的这个重载:
var result = selectedDates.Where((d,i)=>i==0);
【讨论】:
以上是关于c#Dictionary<string,string>如何在不知道键的情况下遍历项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章
524 Longest Word in Dictionary through Deleting
ConcurrentDictionary和Dictionary对比