gpt4 book ai didi

c# - 如何从每个内部列表中获取所需的元素?

转载 作者:行者123 更新时间:2023-11-30 19:53:18 25 4
gpt4 key购买 nike

我有一个数据存储在列表中,它是对象列表。

我需要遍历每个内部列表并检查对象是否满足条件然后将其存储在其他列表中。

public class Data //class that actually holds data
{
public string DataPart;
public string Category;
public Data (string dataPart, string category)
{
this.DataPart = dataPart;
this.Category = category;
}
}

存储数据的数据结构如下:

Dictionary<int, List<Data>>

显示我当前解决方案的示例代码:

Dictionary<int, List<Data>> dataTbl = new Dictionary<int, List<Data>>();

//initializing the data structure
List<Data> lst1 = new List<Data>();
lst1.Add(new Data("data1OfLst1", "cat1"));
lst1.Add(new Data("data2OfLst1", "cat2"));
lst1.Add(new Data("data3Oflst1", "cat3"));
dataTbl.Add(1, lst1);
List<Data> lst2 = new List<Data>();
lst2.Add(new Data("data1OfLst2", "cat1"));
lst2.Add(new Data("data2OfLst2", "cat2"));
lst2.Add(new Data("data3Oflst2", "cat3"));
dataTbl.Add(2, lst2);

List<Data> cat1Data = new List<Data>();
foreach(List<Data> datList in dataTbl.Values)
{
if(datList.Any( x => x.Category == "cat1"))
cat1Data.Add(datList.Where(x => x.Category == "cat1").FirstOrDefault());
}

但是Dictionary中的记录数和每条记录的List中的元素数会是一个很大的数字。因此,我正在寻找更好的解决方案。

请注意,Dictionary 中的某些记录可能不包含满足条件的任何此类数据(此处为 "cat1" 检查).最终列表不应包含 null

编辑:

一般假设(不是顽固的验证)内部列表中应该只有一个(或没有)特定类别的条目,因此不会有包含多个带有 的对象的内部列表“cat1”

最佳答案

正如我在评论中所说的那样,只要您不使用探查器来指示是否您甚至有性能问题并且< strong>if 是,if 这是由您的代码或其他您没有想到的代码引起的。你看:有很多如果。

除此之外,我为您准备了一些更智能的代码,它们不会更快 - 如果有的话,但更易于阅读和维护,这应该是您的主要目标,一切else 只是在寻找纳秒。

List<Data> cat1Data = new List<Data>();
foreach(List<Data> datList in dataTbl.Values)
{
var el = datList.FirstOrDefault(x => x.Category == "cat1");
if(el != null)
cat1Data.Add(el);
}

FirstOrDefault 将返回默认值(null 对于引用类型,对于结构类型为结构默认值)。事实上,您检查同一件事两次。

所以你不需要检查当前列表中是否有满足你条件的元素,然后再次选择这个元素。而是直接搜索它,如果找到就添加它。

关于c# - 如何从每个内部列表中获取所需的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49914179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com