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

Sekotka

Client
Регистрация
07.10.2015
Сообщения
34
Благодарностей
14
Баллы
8
Подскажите пожалуйста, есть большой список на сотни тысяч строк. Почти все элементы парные по началу строки до пробела, но попадаются без пары и портят всю работу (требуется каждый раз сравнивать строки, чтобы нормально отрабатывало, но на таких объемах это много времени)
Пример списка
blabla какой-то рандомный текст
blabla какой-то рандомный текст
yaheee какой-то рандомный текст
yaheee какой-то рандомный текст
exex какой-то рандомный текст
olala какой-то рандомный текст
olala какой-то рандомный текст
Как мне можно максимально быстро почистить список от беспарных элементов (в примере это exex какой-то рандомный текст)?
Спасибо!
 

SanchoPancho

Client
Регистрация
09.12.2015
Сообщения
164
Благодарностей
82
Баллы
28
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

doc

Client
Регистрация
30.03.2012
Сообщения
8 613
Благодарностей
4 601
Баллы
113

Sekotka

Client
Регистрация
07.10.2015
Сообщения
34
Благодарностей
14
Баллы
8

Sekotka

Client
Регистрация
07.10.2015
Сообщения
34
Благодарностей
14
Баллы
8
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);
    }
}
Спасибо большое, отрабатывает!
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 613
Благодарностей
4 601
Баллы
113

Sekotka

Client
Регистрация
07.10.2015
Сообщения
34
Благодарностей
14
Баллы
8
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

Client
Регистрация
07.10.2015
Сообщения
34
Благодарностей
14
Баллы
8
если я правильно понял условия, отрабатывать он не должен
На тестовом списке отработал, но рабочем пока нет, т.к. там длинный пробел вместо обычного, пытаюсь разобраться
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 613
Благодарностей
4 601
Баллы
113
На тестовом списке отработал, но рабочем пока нет, т.к. там длинный пробел вместо обычного, пытаюсь разобраться
а ты в тестовом списк текст разный сделай
 
  • Спасибо
Реакции: Sekotka

Sekotka

Client
Регистрация
07.10.2015
Сообщения
34
Благодарностей
14
Баллы
8

Sekotka

Client
Регистрация
07.10.2015
Сообщения
34
Благодарностей
14
Баллы
8
Да, пример списка для большего понимания тогда такой:
blabla{разделитель}текст1
blabla{разделитель}текст2
yaheee{разделитель}текст3
yaheee{разделитель}текст4
exex{разделитель}текст5
olala{разделитель}текст6
olala{разделитель}текст7
 

SanchoPancho

Client
Регистрация
09.12.2015
Сообщения
164
Благодарностей
82
Баллы
28
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

SanchoPancho

Client
Регистрация
09.12.2015
Сообщения
164
Благодарностей
82
Баллы
28
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

Sekotka

Client
Регистрация
07.10.2015
Сообщения
34
Благодарностей
14
Баллы
8
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

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