首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Linq将两个列表与Certail条件结合起来

使用Linq将两个列表与Certail条件结合起来
EN

Stack Overflow用户
提问于 2022-01-20 11:18:54
回答 4查看 121关注 0票数 0
代码语言:javascript
复制
  List<string> OngoingClass = new List<String>()
   { 
     "FLEXI","RETAIL","LITE","RTSPL"
   };
 List<string> ReturnClass = new List<String>()
  {
     "FLEXI","LITE","RETAIL","RTSPL"
  };

需要将这两个列表与特定条件结合起来。1.OngoingClass柔性版应该与ReturnClass柔性版结合--不应该与类的其余部分结合。2.同样,轻票价应与轻票价相结合。3.其余的类可以相互结合。

例如,结果希望

代码语言:javascript
复制
{ "FLEXI" , "FLEXI" }
{ "LITE","LITE"}
{ "RETAIL","RETAIL"}
{ "RETAIL","RTSPL"}
{ "RTSPL","RETAIL"}
{ "RTSPL","RETAIL"} 
EN

回答 4

Stack Overflow用户

发布于 2022-01-20 12:19:16

正如我在评论中所说的,可以有更好的算法来获得一些组合,但是对于这个小数据集来说,这将起到作用。

代码语言:javascript
复制
    List<Tuple<string, string>> resultSequence = new List<Tuple<string, string>>(); 
    OngoingClass.ForEach( item => 
    {
        ReturnClass.ForEach( item2 => 
            {
                if ((item == item2 && item2 == "FLEXI") || (item == item2 && item2 == "LITE") || ( item != "FLEXI" && item != "LITE" && item2 != "FLEXI" && item2 != "LITE"))
                 { 
                     resultSequence.Add( new Tuple<string, string> ( item, item2 )); 
                  }

            });
    });

显示结果

代码语言:javascript
复制
    foreach (var item in resultSequence)
    {
        Console.WriteLine(item);
    }
票数 0
EN

Stack Overflow用户

发布于 2022-01-20 23:07:07

这对我来说很管用:

代码语言:javascript
复制
var OngoingClass = new List<String>() { "FLEXI", "RETAIL", "LITE", "RTSPL" };
var ReturnClass = new List<String>() { "FLEXI", "LITE", "RETAIL", "RTSPL" };

var SpecialClass = new List<String>() { "FLEXI", "LITE" };

var query =
    from o in OngoingClass
    from r in ReturnClass
    where (SpecialClass.Contains(o) && r == o)
        || (!SpecialClass.Contains(o) && !SpecialClass.Contains(r))
    select (o, r);

这允许任何值都是“特殊的”,并且只能与自己配对。

我得到了这个结果:

票数 0
EN

Stack Overflow用户

发布于 2022-01-24 19:24:04

这里有一种方法,如果您不需要/想要重复的话,它可以达到这个目的。在将结果连接到元组列表(List<(string, string)>)之前,“特殊”匹配和其他匹配分别进行聚合。

代码语言:javascript
复制
var OngoingClass = new List<String>() { "FLEXI","RETAIL","LITE","RTSPL" };
var ReturnClass = new List<String>() { "FLEXI","LITE","RETAIL","RTSPL" };

var SpecialClass = new List<String> { "FLEXI", "LITE" };

var SpecialResult =
    OngoingClass.Intersect(ReturnClass).Intersect(SpecialClass)
    .Select(special => (special, special));

var OtherResult =
    OngoingClass.Except(SpecialClass)
    .SelectMany(ongoing => ReturnClass.Except(SpecialClass)
        .Select(ret => (ongoing, ret)));

var Result = SpecialResult.Concat(OtherResult).ToList();

结果:

代码语言:javascript
复制
[0]: ("FLEXI", "FLEXI")
[1]: ("LITE", "LITE")
[2]: ("RETAIL", "RETAIL")
[3]: ("RETAIL", "RTSPL")
[4]: ("RTSPL", "RETAIL")
[5]: ("RTSPL", "RTSPL")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70785262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档