удалить разделенные строки по индексу с одинаковым значением из списка

#c# #split #duplicates #line #distinct

#c# #разделить #дубликаты #строка #distinct

Вопрос:

-из списка примером является 9120038560640, который встречается дважды или может быть больше.
-строки, хранящиеся в списке<.string> items = File .Прочитайте все строки (путь к файлу).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. Это то, с чем у вас возникли проблемы, или вы просто пытаетесь заставить нас сделать это за вас?

2. CSV в DataTable, отличающийся по столбцу, сохраните его снова в файле, если это необходимо. Также ваш вопрос слишком широкий!

3. привет @Abion47 для меня это немного сложная проблема, поэтому я прошу, чтобы кто-нибудь мог мне помочь.

4. привет @mybirthname правильно ли это использовать Excel? я уже так делал. но мне нужно это автоматизировать.

Ответ №1:

хорошо, я получил ответ, и это работает

элементы = элементы.Где(x => x.Split(‘;’)[ColumnIndex] != «»).OrderBy(x => x.Split(‘;’)[ColumnIndex]).ToList(); Список<.string> _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
                }
            }
        }