如何组合2个包含csv字符串的列表,并将结果与另一个csv进行比较

本文关键字:csv 结果 比较 另一个 列表 何组合 组合 字符串 包含 2个 | 更新日期: 2023-09-27 18:19:06

我有以下列表:

List<string> l1 = new List<string> { "A4,A2","A1,A3" };
List<string> l2 = new List<string> { "A5,A6", "A7,A8" };

我需要将这两个组合起来并创建一个包含所有以逗号分隔的项目的列表,所以我应该以包含:

的内容结束

A4, A1, A2, A3, A5、A6、A7, A8, A9

我使用了下面的代码来组合这两个列表:

string s1 = string.Join(",", l1.ToArray());
string s2 = string.Join(",", l2.ToArray());
var combinedItems = s1 + "," + s2;

然后我需要将结果与另一个列表进行比较,以确保它包含从A1到A8的元素

var allItems = new List<string> { "A1,A2,A3,A4,A5,A6,A7,A8" };
bool allItemsExist = allItems.Any(combinedItems.Contains);

失败的原因是combinedItems变量的顺序与allItems的顺序不匹配。

我如何排序组合项目的内容,或者有做什么我想要实现的另一种方式?

如何组合2个包含csv字符串的列表,并将结果与另一个csv进行比较

var items = new[] { l1, l2 }
            .SelectMany(x => x.SelectMany(y => y.Split(',')))
            .OrderBy(y => y);
var allItems = new List<string> 
                        { "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8" };
var result = allItems.SequenceEqual(items);

解决方案:

      List<string> l1 = new List<string> { "A4,A2", "A1,A3" };
      List<string> l2 = new List<string> { "A5,A6", "A7,A8" };
      var s1 = string.Join(",", l1.ToArray());
      var s2 = string.Join(",", l2.ToArray());
      var combinedItems = s1 + "," + s2;
      var splittedAndOrderedCombinedItems = combinedItems.Split(',').OrderBy(x => x).ToList();
      var allItems = new List<string> { "A1,A2,A3,A4,A5,A6,A7,A8" };
      var firstOrDefault = allItems.FirstOrDefault();
      var splittedAllItems = new List<string>();
      if (firstOrDefault != null) {
        splittedAllItems = firstOrDefault.Split(',').ToList();
      }
      var result = splittedAllItems.Any(splittedAndOrderedCombinedItems.Contains);

您可以拆分所有条目:

List<string> l1 = new List<string> { "A4,A2", "A1,A3" }.SelectMany(x => x.Split(',')).ToList();
List<string> l2 = new List<string> { "A5,A6", "A7,A8" }.SelectMany(x => x.Split(',')).ToList();
string combinedItems = string.Join(",", l1.Concat(l2));
List<string> allItems = new List<string> { "A1,A2,A3,A4,A5,A6,A7,A8" }.SelectMany(x => x.Split(',')).ToList();
bool allItemsExist = allItems.All(combinedItems.Contains);

将所有字符串拆分为它们的"A1" "A2"部分,对它们进行排序并将它们连接起来。

    List<string> l1 = new List<string> { "A4,A2", "A1,A3" };
    List<string> l2 = new List<string> { "A5,A6", "A7,A8" };
    var result = l1.SelectMany(x => x.Split(',')).Union(l2.SelectMany(x => x.Split(','))).OrderBy(x => x).ToList();
    var str = string.Join("," , result);
    str.Dump();
输出:

A1,A2,A3,A4,A5,A6,A7,A8

Quick and Dirty:

        var allItemsList = allItems.First().Split(',').ToList();
        var combinedItemsList = combinedItems.Split(',').ToList();
        bool allItemsExists = combinedItemsList.All(x => allItemsList.Contains(x)); 

将逗号分隔的字符串保存为列表中的一个项目是没有意义的,因此将其创建为REAL列表。

我的最后一条语句确定是否每个Item (A1-A8)都包含在allItemsList中。

PS: allItemsExists在我的测试中返回true