如何在Dictionary<;K、 V>;在C#中
本文关键字:gt lt Dictionary | 更新日期: 2023-09-27 17:53:23
我有一个Dictionary<K,V>
对象已经填充了数据:
Dictionary<string, double[]> ltableData;
每个CCD_ 2具有相同的大小(元素的数量(。
我事先既不知道任何"字符串"键,也不知道">双[]"值的大小。
现在我必须用嵌套的一个循环如下:
for(int i = 0; i< number_elements;i++)
{
foreach (var array in ltableData.Values)
{
ltempList.Add(array[i]);
//other instructions
}
}
如何分配number_elements?我当然可以使用这个解决方案:
var lrowCount;
foreach(var item in ltableData.Values)
{
lrowCount = item.Count();
}
这是有效的,但它当然既难看又难看。有没有更清洁、更有效的方法来提取计数?感谢
Francesco
var lrowCount = ltableData.Values.First().Length;
// or
var lrowCount = ltableData.First().Value.Length;
foreach (var array in ltableData.Values)
{
for (int i = 0; i < array.Length; i++)
{
//other instructions
}
}
或者更可读的
foreach (var array in ltableData.Values)
{
foreach (var val in array)
{
//other instructions
}
}
您可以从任何项目中获取其长度:
int number_elements = ltableData.Values.Select(v => v.Length).FirstOrDefault();
尽管我认为如果你有这样的结构,那么你应该为它创建一个类,它将在顶层有一个Length
,它还将断言并保证所有内部项都有相同的长度。
如果您知道itableData确实包含值,您可以执行以下操作。
ltableData.Values.First().Count();
我不会说这更干净,但你可以做
var number_elements = ltableData.Values.First().Count();
这只是在你必须需要长度的情况下。否则,foreach循环就可以了。
现在你已经根据原始帖子上的评论澄清了你在做什么,很明显你实际上想要
using System.Linq;
var ltempList = ltableData.SelectMany(kvp => kvp.Value);
这将给出一个IEnumerable<double>
,其中包含字典中所有不同条目的所有值,并聚合在一起。
您可以使用它来获得值的总数
var number_elements = ltableData.Select(p => p.Value.Count()).Sum();