C# 从拆分字符串中删除数组中的重复元素

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

我有一个关于从数组列表中删除重复项的问题。我想连接两个表中的两个字符串,然后拆分它。将一个表中的字符串与其他表中的字符串进行比较,如果存在重复项,则将其删除。 我是用这段代码做的,但我想问是否还有其他更快、更短的方法来做

表1:
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);