根据匹配条件从 5 个列表中查找匹配项

莱因哈特

鉴于我有一个看起来像这样的模型:

public sealed class BaseInfo
    {
        public string ValueToBeMatched { get; set; }

        public string CreatedValue { get; set; }
    }

我有初始化BaseInfo类的变量,如下所示:

List<BaseInfo> zeroBaseInfo = new List<BaseInfo>
{
   new BaseInfo
   {
      ValueToBeMatched = "001",
      CreatedValue = "2008-10-10"
   },
   new BaseInfo
   {
      ValueToBeMatched = "003",
      CreatedValue = "2007-10-10"
   },
}

List<BaseInfo> firstBaseInfo = new List<BaseInfo>
{
   new BaseInfo
   {
      ValueToBeMatched = "002",
      CreatedValue = "2006-10-10"
   },
   new BaseInfo
   {
      ValueToBeMatched = "001",
      CreatedValue = "2008-10-10"
   },
}

List<BaseInfo> secondBaseInfo= new List<BaseInfo>
{
   new BaseInfo
   {
      ValueToBeMatched = "001",
      CreatedValue = "2008-10-10"
   },
   new BaseInfo
   {
      ValueToBeMatched = "002",
      CreatedValue = "2006-10-10"
   },
}

List<BaseInfo> thirdBaseInfo = new List<BaseInfo>
{
   new BaseInfo
   {
      ValueToBeMatched = "002",
      CreatedValue = "2006-10-10"
   },
   new BaseInfo
   {
      ValueToBeMatched = "001",
      CreatedValue = "2008-10-10"
   },
}

List<BaseInfo> fourthBaseInfo = new List<BaseInfo>
{
   new BaseInfo
   {
      ValueToBeMatched = "",
      CreatedValue = DateTime.Now.ToString("yyyy-MM-dd")
   },
   new BaseInfo
   {
      ValueToBeMatched = "001",
      CreatedValue = "2008-10-10"
   },
}

条件是5个列表必须相互匹配2个或更多匹配,然后它将存储到新列表中以获取结果。

我正在考虑对每个列表使用 for 循环,并使每个循环中的 if 语句与条件与列表的每个索引相匹配。但我被困住了。

这是我坚持的代码:

for (int i = 0; i < zeroBaseInfo.Count; i++)
            {
                for (int j = 0; j < firstBaseInfo.Count; j++)
                {
                    for (int k = 0; k < secondBaseInfo.Count; k++)
                    {
                        for (int o = 0; o < thirdBaseInfo.Count; o++)
                        {
                            for (int p = 0; p < fourthBaseInfo.Count; p++)
                            {
                                // I am stuck in this point to what needs to be compare, as if statement only works against comparison value between 1 to 1 and not all of lists.
                            }
                        }
                    }
                }
            }

编辑:

预期输出:

List<BaseInfo> matchedNewLists = new List<BaseInfo>
{
   new BaseInfo
   {
      ValueToBeMatched = "001",
      CreatedValue = "2006-10-10"
   },
   new BaseInfo
   {
      ValueToBeMatched = "002",
      CreatedValue = "2008-10-10"
   }
}

由于001并且002满足上述 5 个列表中的条件(2 个匹配项或更多)

非常感谢任何帮助和您的回答。

非常感谢!

扫地机

这可以通过一些 LINQ 操作来完成。我将它们分开以明确我在这里做什么:

var oneLongList = new[] { zeroBaseInfo, firstBaseInfo, secondBaseInfo, thirdBaseInfo, fourthBaseInfo }.SelectMany(x => x);
var allValuesToBeMatched = oneLongList.Select(x => x.ValueToBeMatched);
var grouped = allValuesToBeMatched.GroupBy(x => x);
var filtered = grouped.Where(x => x.Count() >= 2).Select(x => x.Key);
var finalResult = filtered.Select(x => new BaseInfo { ValueToBeMatched = x });

或者您可以将它们合二为一:

var finalResult = new[] { zeroBaseInfo, firstBaseInfo, secondBaseInfo, thirdBaseInfo, fourthBaseInfo }
    .SelectMany(x => x)
    .Select(x => x.ValueToBeMatched)
    .GroupBy(x => x)
    .Where(x => x.Count() >= 2)
    .Select(x => new BaseInfo { ValueToBeMatched = x.Key });

编辑:

var finalResult = new[] { zeroBaseInfo, firstBaseInfo, secondBaseInfo, thirdBaseInfo, fourthBaseInfo }
    .SelectMany(x => x)
    .GroupBy(x => x.ValueToBeMatched)
    .Where(x => x.Count() >= 2)
    .Select(x => x.First());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Excel 列表中查找第 n 个匹配项

来自分类Dev

在列表列表中向后查找第一个匹配项

来自分类Dev

如何根据条件匹配值?

来自分类Dev

根据列表中的匹配项创建列

来自分类Dev

根据条件(Java / Guava)从列表中提取第一个匹配项?

来自分类Dev

在Python的列表列表中查找部分匹配项

来自分类Dev

在两个排序列表中查找匹配项的更好方法比使用for循环好吗?

来自分类Dev

根据Google表格中的最后匹配条件的查找值

来自分类Dev

grep使用列表查找文件中的匹配项,并仅打印列表中每个字符串的第一个匹配项

来自分类Dev

根据条件匹配VBA中的值

来自分类Dev

Django objects.filter包含列表和每个匹配项的5个实例

来自分类Dev

在子列表和类别中查找匹配项

来自分类Dev

轻松查找和替换嵌套列表中的每个匹配项

来自分类Dev

在python列表中查找相同索引的不匹配项

来自分类Dev

查询以查找列表中的所有匹配项

来自分类Dev

r循环/函数从列表中查找匹配项

来自分类Dev

Linq查询以在嵌套列表中查找匹配项

来自分类Dev

在python列表中查找相同索引的不匹配项

来自分类Dev

awk在2个文件中查找不匹配项

来自分类Dev

使用python在两个文件中查找匹配项

来自分类Dev

在两个List <string>中查找不同的匹配项

来自分类Dev

使用python在两个文件中查找匹配项

来自分类Dev

在SAS中的2个数据集之间按条件查找匹配项

来自分类Dev

Elasticsearch:如何根据匹配条件删除条目

来自分类Dev

如何比较两列并根据条件提取匹配项?

来自分类Dev

根据匹配条件查找最后一次出现

来自分类Dev

根据成功匹配索引的条件查找模式的出现次数

来自分类Dev

根据匹配重复条件查找重复行数

来自分类Dev

根据条件查找和匹配最接近的行值

Related 相关文章

  1. 1

    在 Excel 列表中查找第 n 个匹配项

  2. 2

    在列表列表中向后查找第一个匹配项

  3. 3

    如何根据条件匹配值?

  4. 4

    根据列表中的匹配项创建列

  5. 5

    根据条件(Java / Guava)从列表中提取第一个匹配项?

  6. 6

    在Python的列表列表中查找部分匹配项

  7. 7

    在两个排序列表中查找匹配项的更好方法比使用for循环好吗?

  8. 8

    根据Google表格中的最后匹配条件的查找值

  9. 9

    grep使用列表查找文件中的匹配项,并仅打印列表中每个字符串的第一个匹配项

  10. 10

    根据条件匹配VBA中的值

  11. 11

    Django objects.filter包含列表和每个匹配项的5个实例

  12. 12

    在子列表和类别中查找匹配项

  13. 13

    轻松查找和替换嵌套列表中的每个匹配项

  14. 14

    在python列表中查找相同索引的不匹配项

  15. 15

    查询以查找列表中的所有匹配项

  16. 16

    r循环/函数从列表中查找匹配项

  17. 17

    Linq查询以在嵌套列表中查找匹配项

  18. 18

    在python列表中查找相同索引的不匹配项

  19. 19

    awk在2个文件中查找不匹配项

  20. 20

    使用python在两个文件中查找匹配项

  21. 21

    在两个List <string>中查找不同的匹配项

  22. 22

    使用python在两个文件中查找匹配项

  23. 23

    在SAS中的2个数据集之间按条件查找匹配项

  24. 24

    Elasticsearch:如何根据匹配条件删除条目

  25. 25

    如何比较两列并根据条件提取匹配项?

  26. 26

    根据匹配条件查找最后一次出现

  27. 27

    根据成功匹配索引的条件查找模式的出现次数

  28. 28

    根据匹配重复条件查找重复行数

  29. 29

    根据条件查找和匹配最接近的行值

热门标签

归档