如何在字典中的特定键处访问列表中的特定索引
本文关键字:访问 列表 索引 字典 | 更新日期: 2023-09-27 18:03:11
我创建了一个这样的字典:
var sortedDict = new Dictionary<DateTime, List<double>>();
我现在在任何特定的日期时间键上都有多个值(列表(。
如果我需要访问任何DATETIME键上的特定值,我该如何访问它?
谢谢你的帮助。
我建议使用如下方法,给定utcNow
的键和索引i
:
List<double> vals;
if(sortedDict.TryGetValue(utcNow, out vals)) {
double val = vals[i];
}
这将避免在字典上进行双索引查找,并清楚地传达意图(该值可能存在,也可能不存在(
字典查找通常很便宜,对于DateTime键来说也很便宜,但MSDN指出,检索速度取决于为TKey指定类型的哈希算法的质量。还要注意的是,查找方法O(1(,但对于经常访问的大型字典,方法可能只需要避免双重查找。
因此,为了完整性:
int i = 42; // Or whatever index you want to look up
DateTime date = DATE_YOU_WANT_HERE;
List<double> valuesForDate;
bool foundDate = sortedDict.TryGetValue(date, out valuesForDate);
if (foundDate)
{
double theValue = valuesForDate[i];
}
else
{
// Whatever you need to do if there is no key for your date
}
给定密钥date
和i
的索引,这很简单:
var value = sortedDict[date][i];
这是假设该关键字存在于字典中。如果有可能没有,那么你应该先检查一下。
if (sortDict.ContainsKey(date))
{
var value = sortedDict[date][i];
}
当您使用类型为S
的密钥访问Dictionary<S,T>
时,您得到的是类型为T
的对象。在您的情况下,T
就是List<double>
。
如果你想提取字典中所有键的索引i
(因为重读这个问题,我不确定这不是你想要的(,那么这很简单:
var allI = sortedDict.Select(k => k.Value[i]).ToList();
但这假设i
存在于所有键值中。如果没有,你也需要检查一下:
var allI = sortedDict.Where(k => i < k.Value.Length ).Select(k => k.Value[i]).ToList();
var utcNow = DateTime.UtcNow; //example DateTime
if (sortedDict.ContainsKey(utcNow))
{
foreach (double listItem in sortedDict[utcNow])
{
//manipulate listItem here
}
}
编辑:看起来我误解了这个问题;我认为您想要迭代sortedDict
中特定DateTime
键的List<Double>
的值。Eric J和Matt Burland的解决方案是更好的解决方案。