【问题标题】:Linq compare 2 string arrays when both have same values当两个字符串数组具有相同的值时,Linq 比较两个字符串数组
【发布时间】:2016-10-18 04:41:15
【问题描述】:

我有 2 个字符串数组/值 x,y 并试图获取不在 x 中的 y 值。仅当 x 的所有值也在 y 中时,我才尝试获取此值。

        string x = "CA ,WA";
        string y = "CA,WA,NY";
        var srcDetails = x.ToLower().Replace(" ", string.Empty).Split(',');
        var dstDetails = y.ToLower().Replace(" ", string.Empty).Split(',');

        var common = dstDetails.Intersect(srcDetails); //common in x,y

        var destGreaterSrc= dstDetails.Except(srcDetails); //if y > x

        var extraInDest = dstDetails.Except(common); 

extraInDest 是 y 中的额外值,不在 x 中

在上面的代码中,dest 中的额外值输出为 NY。

我试图找到 x 的值可能不等于 y 的情况

    string x = "CA ,NV";
    string y = "CA,WA,NY";

我们怎样才能使 var extraInDest 输出为 false。

like var extraInDest = dstDetails.Except(common) 导致 false 或 null

【问题讨论】:

  • 你的字符串会一直是 CSV 格式吗?
  • 始终以逗号分隔。
  • 字符串 x = "CA ,WA";字符串 y = "CA,WA,NY"; var srcDetails = x.Split(','); var dstDetails = y.Split(','); var extraInSrc = srcDetails.Where(s => !dstDetails.Select(d => d.Trim().ToLower()).Contains(s.Trim().ToLower())).ToList(); if (extraInSrc.Count() !srcDetails.Select(d => d.Trim().ToLower()) .Contains(s.Trim().ToLower())).ToList(); }
  • 非常有趣的代码块卡西。

标签: c# linq


【解决方案1】:

最简单的就是

var extraInDest = srcDetails.Except(dstDetails).Any()
    ? null 
    : dstDetails.Except(srcDetails);

【讨论】:

  • @Kurkula 那么这个对你有帮助吗?
【解决方案2】:

这应该很简单,如果你的比较结果总是一个布尔值,你应该使用它来代替

bool extraInDest = srcDetails.All(v=>dstDetails.Contains(v));

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多