Удалить в списке строки без пары

Sekotka

Client
Регистрация
07.10.2015
Сообщения
92
Реакции
24
Баллы
8
Подскажите пожалуйста, есть большой список на сотни тысяч строк. Почти все элементы парные по началу строки до пробела, но попадаются без пары и портят всю работу (требуется каждый раз сравнивать строки, чтобы нормально отрабатывало, но на таких объемах это много времени)
Пример списка
blabla какой-то рандомный текст
blabla какой-то рандомный текст
yaheee какой-то рандомный текст
yaheee какой-то рандомный текст
exex какой-то рандомный текст
olala какой-то рандомный текст
olala какой-то рандомный текст
Как мне можно максимально быстро почистить список от беспарных элементов (в примере это exex какой-то рандомный текст)?
Спасибо!
 
C#:
Развернуть Свернуть Копировать
var myList = project.Lists["myList"];
var countDict = new Dictionary<string, int>();
var result = project.Lists["result"];

foreach (var item in myList)
{
    if (countDict.ContainsKey(item))
    {
        countDict[item]++;
    }
    else
    {
        countDict[item] = 1;
    }
}

foreach (var item in myList)
{
    if (countDict[item] > 1)
    {
        result.Add(item);
    }
}
 
  • Спасибо
Реакции: Sekotka
C#:
Развернуть Свернуть Копировать
var myList = project.Lists["myList"];
var countDict = new Dictionary<string, int>();
var result = project.Lists["result"];

foreach (var item in myList)
{
    if (countDict.ContainsKey(item))
    {
        countDict[item]++;
    }
    else
    {
        countDict[item] = 1;
    }
}

foreach (var item in myList)
{
    if (countDict[item] > 1)
    {
        result.Add(item);
    }
}
Спасибо большое, отрабатывает!
 
C#:
Развернуть Свернуть Копировать
var myList = project.Lists["myList"];
var countDict = new Dictionary<string, int>();
var result = project.Lists["result"];

foreach (var item in myList)
{
    if (countDict.ContainsKey(item))
    {
        countDict[item]++;
    }
    else
    {
        countDict[item] = 1;
    }
}

foreach (var item in myList)
{
    if (countDict[item] > 1)
    {
        result.Add(item);
    }
}
Только подскажите пожалуйста, как быть если пробел нужно будет заменить на другой символ, отделяющий дубль от рандомного текста,или вот оказалось, что пробел в исходнике длинный - " "
 
если я правильно понял условия, отрабатывать он не должен
На тестовом списке отработал, но рабочем пока нет, т.к. там длинный пробел вместо обычного, пытаюсь разобраться
 
На тестовом списке отработал, но рабочем пока нет, т.к. там длинный пробел вместо обычного, пытаюсь разобраться
а ты в тестовом списк текст разный сделай
 
  • Спасибо
Реакции: Sekotka
Да, пример списка для большего понимания тогда такой:
blabla{разделитель}текст1
blabla{разделитель}текст2
yaheee{разделитель}текст3
yaheee{разделитель}текст4
exex{разделитель}текст5
olala{разделитель}текст6
olala{разделитель}текст7
 
C#:
Развернуть Свернуть Копировать
var myList = project.Lists["myList"];
var countDict = new Dictionary<string, int>();
var result = project.Lists["result"];

System.Collections.Generic.Dictionary<string, int> wordCounts = new System.Collections.Generic.Dictionary<string, int>();

foreach (var line in myList)
{
    string[] parts = line.Split(' ');
    string firstWord = parts[0];

    if (wordCounts.ContainsKey(firstWord))
    {
        wordCounts[firstWord]++;
    }
    else
    {
        wordCounts[firstWord] = 1;
    }
}

System.Collections.Generic.List<string> filteredLines = myList.Where(line =>
{
    string[] parts = line.Split(' ');
    string firstWord = parts[0];
    return wordCounts[firstWord] > 1;
}).ToList();

foreach (var line in filteredLines)
{
    result.Add(line);
}
 
  • Спасибо
Реакции: doc и Sekotka
C#:
Развернуть Свернуть Копировать
var myList = project.Lists["myList"];
var countDict = new Dictionary<string, int>();
var result = project.Lists["result"];

System.Collections.Generic.Dictionary<string, int> wordCounts = new System.Collections.Generic.Dictionary<string, int>();

foreach (var line in myList)
{
    string[] parts = line.Split(' ');
    string firstWord = parts[0];

    if (wordCounts.ContainsKey(firstWord))
    {
        wordCounts[firstWord]++;
    }
    else
    {
        wordCounts[firstWord] = 1;
    }
}

System.Collections.Generic.List<string> filteredLines = myList.Where(line =>
{
    string[] parts = line.Split(' ');
    string firstWord = parts[0];
    return wordCounts[firstWord] > 1;
}).ToList();

foreach (var line in filteredLines)
{
    result.Add(line);
}
Разбиваю строку до первого пробела
 
  • Спасибо
Реакции: Sekotka
C#:
Развернуть Свернуть Копировать
var myList = project.Lists["myList"];
var countDict = new Dictionary<string, int>();
var result = project.Lists["result"];

System.Collections.Generic.Dictionary<string, int> wordCounts = new System.Collections.Generic.Dictionary<string, int>();

foreach (var line in myList)
{
    string[] parts = line.Split(' ');
    string firstWord = parts[0];

    if (wordCounts.ContainsKey(firstWord))
    {
        wordCounts[firstWord]++;
    }
    else
    {
        wordCounts[firstWord] = 1;
    }
}

System.Collections.Generic.List<string> filteredLines = myList.Where(line =>
{
    string[] parts = line.Split(' ');
    string firstWord = parts[0];
    return wordCounts[firstWord] > 1;
}).ToList();

foreach (var line in filteredLines)
{
    result.Add(line);
}
Спасибо огромное! Этот вариант отрабатывает отлично и очень быстро!
 
  • Спасибо
Реакции: SanchoPancho

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)