如何在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

如何在Dictionary<;K、 V>;在C#中

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