从列表中删除具有相同值的索引拆分行

时间:2016-10-04 04:21:07

标签: c# split duplicates line distinct

- 从列表中一个例子是9120038560640发生两次或者可能更多。
存储在List< .string>中的行items = File.ReadAllLines(filepath).ToList();
- 每条线都用半冒号分开 - 第二个索引或[1]应与所有行进行比较,并删除找到的匹配。

363193; 9120038560640; 7,11; 9,99< ----必须删除
363195; 9120038560641; 9,81; 14,99
363194; 9120038560640; 9,81; 14,99< ---必须删除
363196; 9120038560642; 9,81; 14,99
363197; 9120038560643; 9,81; 14,99
....
..
点。

顺便说一句。我的文件有25,000个++项目 谢谢

1 个答案:

答案 0 :(得分:0)

好的,我得到了答案,这是有效的

items = items.Where(x => x.Split(&#39 ;;')[columnIndex]!="")。OrderBy(x => x。分裂(&#39 ;;')[columnIndex])ToList();             列表与LT; .string> _items = items.ConvertAll(z => z); //我制作独立副本

        string[] itemsArr = items.ToArray();
        int countA = 0;
        foreach (string itemArr in itemsArr)
        {
            List<int> groupDuplicates = new List<int>();
            for (int a = countA; a < itemsArr.Count(); a++)
            {
                if (itemArr != itemsArr[a])
                {
                    if (itemArr.Split(';')[columnIndex] == itemsArr[a].Split(';')[columnIndex]) //if matched then add
                    {
                        groupDuplicates.Add(a); // listing index to be remove
                    }

                    else
                        break; //no way to go through the bottom of the list and also to make the performance faster
                }
                countA++;
            }

            if (groupDuplicates.Count() != 0)
            {
                groupDuplicates.Add(groupDuplicates.First() - 1); //I add here the first item in duplicates

                foreach (int m in groupDuplicates)
                {
                    _items.Remove(items.ElementAt(m)); //remove by item not by index
                }
            }
        }