如果我有两个字符串都是逗号分隔的值,并且我知道其中一个字符串只缺少一个部分,我如何在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对你的帖子的评论。