C# 从拆分字符串中删除数组中的重复元素
我有一个关于从数组列表中删除重复项的问题。我想连接两个表中的两个字符串,然后拆分它。将一个表中的字符串与其他表中的字符串进行比较,如果存在重复项,则将其删除。 我是用这段代码做的,但我想问是否还有其他更快、更短的方法来做 表1:C# 从拆分字符串中删除数组中的重复元素,c#,arrays,string,list,C#,Arrays,String,List,我有一个关于从数组列表中删除重复项的问题。我想连接两个表中的两个字符串,然后拆分它。将一个表中的字符串与其他表中的字符串进行比较,如果存在重复项,则将其删除。 我是用这段代码做的,但我想问是否还有其他更快、更短的方法来做 表1:String a=“abc” 表2:String b=“def,abc,okl” 结果:“abc、def、okl” 我的代码: foreach(DataRow tr in transM.Rows) { foreach(DataRow tb in tableDGV1
String a=“abc”
表2:String b=“def,abc,okl”
结果:“abc、def、okl”
我的代码:
foreach(DataRow tr in transM.Rows)
{
foreach(DataRow tb in tableDGV1.Rows)
{
if (tr["ID"].ToString() == tb["ID"].ToString())
{
string trMitter = tr["Tr"].ToString() + "," + tb["Tr"].ToString();
string[] trSplit = trMitter.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries);
List<string> listTr = new List<string>(trSplit);
for (int k = 0; k < listTr.Count; k++)
{
for (int g = k + 1; g < listTr.Count; g++)
{
if (listTr[g].ToString() == listTr[k].ToString()) listTr.RemoveAt(g);
}
}
}
}
}
foreach(传输行中的数据行tr)
{
foreach(tableDGV1.Rows中的数据行tb)
{
if(tr[“ID”].ToString()==tb[“ID”].ToString())
{
字符串trMitter=tr[“tr”].ToString()+,“+tb[“tr”].ToString();
string[]trSplit=trMitter.Split(新字符[]{',},StringSplitOptions.RemoveEmptyEntries);
List listTr=新列表(trSplit);
for(int k=0;k
如果您使用的是.Net V3.5或更高版本,只需使用
var firstSource = firstString.Split(',');
var secondeSource = secondString.Split(',');
var result = firstSource.Union(secondSource);`
或者使用.Distinct()
:
我怀疑最大的性能影响是表行上的循环。
您可以使用此选项优化查询(如果ID列是主键)
foreach(传输行中的数据行tr)
{
字符串idValue=tr[“ID”].ToString();
DataRow[]foundRows=tableDGV1.Select(“ID=“+idValue”);
if(foundRows.Length==1)
{
//这里有一个要与外部行连接的内部行
string joinedString=tr[“tr”].ToString()+,“+foundRows[0][“tr”].ToString();
string[]trSplit=joinedString.Split(新字符[]{',},
StringSplitOptions.RemoveEmptyEntries);
List listTr=trSplit.Distinct().ToList();
.........
}
}
这将删除内部表上不必要的循环您可以先创建一个包含所有元素的列表,对列表进行排序并删除重复项。 这里有一个相关的问题:方法删除重复项:
var items1 = new[] { "abc" };
var items2 = "def,abc,okl";
var splitItems2 = items2.Split(',');
var result =
items1.Union(splitItems2) // Removes duplicates
.ToArray();
可以使用:通过使用默认的相等比较器生成两个序列的集合并集
string[] id1 = { "abc" };
string[] id2 = { "def", "abc", "okl" };
IEnumerable<string> both = id2.Union(id1);
foreach (string id in both)
Console.WriteLine(id);
string[]id1={“abc”};
字符串[]id2={“def”、“abc”、“okl”};
IEnumerable both=id2.并集(id1);
foreach(两者中的字符串id)
控制台写入线(id);
I如果您使用的是.NETV3.5或更高版本,只需使用var firstSource=firstString.Split(',');var secondeSource=secondString.Split(',');var result=firstSource.Union(secondSource)代码>此问题应移至var result=firstSource.Union(secondSource)之后
要显示结果,我使用tb[“Tr”]=result
?使用简单的foreach(result中的var项){…}
foreach(DataRow tr in transM.Rows)
{
string idValue = tr["ID"].ToString();
DataRow[] foundRows = tableDGV1.Select("ID = " + idValue);
if(foundRows.Length == 1)
{
// Here you have the internal row to join with the external one
string joinedString = tr["Tr"].ToString() + "," + foundRows[0]["Tr"].ToString();
string[] trSplit = joinedString.Split(new char[] {','},
StringSplitOptions.RemoveEmptyEntries);
List<string> listTr = trSplit.Distinct().ToList();
.........
}
}
var items1 = new[] { "abc" };
var items2 = "def,abc,okl";
var splitItems2 = items2.Split(',');
var result =
items1.Union(splitItems2) // Removes duplicates
.ToArray();
string[] id1 = { "abc" };
string[] id2 = { "def", "abc", "okl" };
IEnumerable<string> both = id2.Union(id1);
foreach (string id in both)
Console.WriteLine(id);