C# 从字符串中删除重复值
我有两条线C# 从字符串中删除重复值,c#,string,c#-4.0,C#,String,C# 4.0,我有两条线 string s1 = "Apple, Mango, Cherry"; string s2 = "Apple, Mango, Cherry, Pear"; 现在我想比较两个字符串并删除重复的值和 结果应该是 string s3 = "Pear" 怎么做 我试过: List<string> list1 = new List<string> {CommonJurisdictions }; List<string> list2 = new List&
string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";
现在我想比较两个字符串并删除重复的值和
结果应该是
string s3 = "Pear"
怎么做
我试过:
List<string> list1 = new List<string> {CommonJurisdictions };
List<string> list2 = new List<string> { Jurisdiction };
List<string> ulist = list2.Except(list1).ToList();
List list1=新列表{commonjudictions};
List list2=新列表{辖区};
List ulist=list2.Except(list1.ToList();
但是它没有给出预期的结果。如果它们是字符串列表,则使用
,除了:
List<string> s1 = new List<string> {"Apple", "Mango","Cherry"};
List<string> s2 = new List<string> {"Apple", "Mango", "Cherry", "Pear"};
var result = s2.Except(s1); //Pear
使用String.Split
,Enumerable.Except
,Concat
和String.Join
string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";
var s1Token = s1.Split(',').Select(t => t.Trim()).ToArray();
var s2Token = s2.Split(',').Select(t => t.Trim()).ToArray();
var inSecondNotFirst = s1Token.Except(s2Token);
var inFirstNotSecond = s2Token.Except(s1Token);
string s3 = String.Join(", ", inSecondNotFirst.Concat(inFirstNotSecond));
但是更有效的(O(n)
)是使用HashSet
,它是:
var s1Token=newhashset(s1.Split(',).Select(t=>t.Trim());
var s2Token=newhashset(s2.Split(',).Select(t=>t.Trim());
s1Token.SymmetricExceptWith(s2Token);
字符串s3=string.Join(“,”,s1Token);
您可以尝试以下方法:
var array1 = s1.Split(',');
var array2 = s2.Split(',');
var s= array1.Except(array2).Concat(array2.Except(array1));
这在阵列和另一个阵列(基于OP的示例)中都是独一无二的:
var list1=新列表{“苹果”、“芒果”、“樱桃”、“草莓”};
var list2=新列表{“苹果”、“芒果”、“樱桃”、“梨”};
var ulist=list1.Except(list2).Union(list2.Except(list1)).ToList();
查看HashSet类的SymmetricExceptWith方法
var separator=“,”.ToCharArray();
字符串s1=“苹果、芒果、樱桃”;
string s2=“苹果、芒果、樱桃、梨”;
字符串[]a1=s1。拆分(分隔符);
字符串[]a2=s2.拆分(分隔符);
var差异=新哈希集(a1);
与(a2)不同的对称性异常;
您可以轻松地重构此文件以删除其他分配。string s1=“Apple,Mango,Cherry”;
string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";
List<string> list1 = s1.Split(',').Select(s => s.Trim()).ToList();
List<string> list2 = s2.Split(',').Select(s => s.Trim()).ToList();
var res = list2.Count > list1.Count ? list2.Where(s => !list1.Contains(s)).ToList() :
list1.Where(s => !list2.Contains(s)).ToList();
string s2=“苹果、芒果、樱桃、梨”;
List list1=s1.Split(',')。选择(s=>s.Trim()).ToList();
List list2=s2.Split(',')。选择(s=>s.Trim()).ToList();
var res=list2.Count>list1.Count?list2.Where(s=>!list1.Contains(s)).ToList():
list1.Where(s=>!list2.Contains(s)).ToList();
这些不是字符串,而是无法编译的内容。提供真实的代码并展示您的尝试。您是否尝试过任何方法来解决您的问题?请创建一个您的第一个和第二个代码示例甚至不匹配的示例。一个用于字符串
,另一个用于列表
。哎呀,8,6k,还有一个未加密的昵称\您可以使用Concat
,因为Except
已经删除了重复项。Concat只是简单地追加,而Union跳过重复项,所以这需要更多的工作。@TimSchmelter很好的提示,谢谢!
string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";
var a1 = s1.Split(',');
var a2 = s2.Split(',');
var result = string.Join(", ", a2.Except(a1));
var array1 = s1.Split(',');
var array2 = s2.Split(',');
var s= array1.Except(array2).Concat(array2.Except(array1));
var list1 = new List<string> { "Apple", "Mango", "Cherry", "Strawberry" };
var list2 = new List<string> { "Apple", "Mango", "Cherry", "Pear" };
var ulist = list1.Except(list2).Union(list2.Except(list1)).ToList();
var seperator = ", ".ToCharArray();
string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";
string[] a1 = s1.Split(seperator);
string[] a2 = s2.Split(seperator);
var difference = new HashSet<string>(a1);
difference.SymmetricExceptWith(a2);
string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";
List<string> list1 = s1.Split(',').Select(s => s.Trim()).ToList();
List<string> list2 = s2.Split(',').Select(s => s.Trim()).ToList();
var res = list2.Count > list1.Count ? list2.Where(s => !list1.Contains(s)).ToList() :
list1.Where(s => !list2.Contains(s)).ToList();