比较C#中两个逗号分隔的列表以获得差异



如果我有两个字符串都是逗号分隔的值,并且我知道其中一个字符串只缺少一个部分,我如何在C#中检索它?

示例:

String 1 = "one,two,four"
String 2 = "one,two,three,four"
Result = "three"

我尝试过使用返回-1或1的String.Compare,所以我知道它们是不同的,但我如何实际提取差值?

我想要一个包含字符串1 中缺失值的第三个字符串

提前谢谢。

使用linq Except both ways和union来获得两者的差异。

String[] strs1 = "one,two,four".Split(",");
String[] strs2 = "one,two,three,four".Split(",");
var res = strs1.Except(strs2).Union(strs2.Except(strs1));
String result = String.Join(",",res);
string result = null; 
string[] arr1 = 1.Split(','); //Get the first string into array
string[] arr2 = 2.Split(','); //Get the second string into array
//Compare lengths, if arr1 is bigger call Except on it, else on arr2
//Linq .Except will return elements of array which aren't in the parameter array
if(arr1.Length > arr2.Length 
{ 
result = String.Join(" ", arr1.Except(arr2).ToArray()); 
} 
else 
{ 
result = String.Join(" ", arr2.Except(arr1).ToArray());
}

您必须将字符串转换为序列(IEnumerable<string>(。一旦你有了,你就可以使用Except()。最简单的方法是String.Split(),尽管我真的很讨厌这种方法。。。在许多边缘情况下,这一点可能会下降,性能甚至不太好。引入一个实际的CSV解析器要好得多。但为了简洁起见,堆栈溢出:

var string1 = "one,two,four";
var string2 = "one,two,three,four";
var Result = string.Join(",", string2.Split(',').Except(string1.Split(',')));

在这里看到它的工作:

https://dotnetfiddle.net/l6AkOr

@Olivier Rogier已经给出了一个很好的答案。这里有一些代码来理解这个概念(他的代码更有效(。

var split1 = String1.Split(",");
var split 2 = String2.Split(",");
var builder = new StringBuilder();
//other ways to do this, but aiming for illustration of the concept
List<string> list1;
List<string> list2;
if(split1.Length > split2) {
list1 = split1.ToArray();
list2 = split2.ToArray();
}
else {
list2 = split1.ToArray();
list1 = split2.ToArray();
}
foreach(var s in list1)
{
if(!list2.Contains(s))
{
if(builder.Length > 0)
{
builder.Append(",");
}
builder.Append(s);
}
}

这将为您生成一个或多个项目的列表(如果有2个或更多,则以逗号分隔(。我做了这个自由形式,所以可能有打字错误,所以调试。

一旦你了解了它的工作原理,请阅读@Olivier Rogier对你的帖子的评论。

相关内容

  • 没有找到相关文章

最新更新