Как посчитать кол-во вхождений строки в список?

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 724
Благодарностей
1 377
Баллы
113
Приветствую!
Буду Вам премного благодарен если подскажите как реализовать на C# следующую задачу:
Есть список с id-шниками. Нужно отобрать только те id-шники, которые встречаются в списке не менее N раз.

То есть из списка:
1
2
3
1
4
5
2

при N = 2, нужно получить
1
2

p.s список большой, несколько млн записей и больше ... поэтому хотелось бы решение, которое быстро работает
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 264
Баллы
113
C#:
var lst = project.Lists["Список 1"];
var newList = new List < string > ();
int kol = 2; // N

foreach(string val in lst) {
  if (lst.Where(x => x == val).Count() >= kol) // берем те элементы которые встречаются N раз
    newList.Add(val);
}

lst.Clear();
lst.AddRange(newList.Distinct());
 
Последнее редактирование:

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Код:
var lst = project.Lists["Список 1"];
int kol = 2; // N

lst = lst
    .GroupBy(i => i)
    .Where(i => i.Count() >= kol)
    .Select(i => i.Key)
    .ToList();
Имхо, так будет быстрее. Т.к. не вижу смысла проходить в цикле по всему списку, и на каждой итерации делать выборку.
Проще сразу сгруппировать, и потом отобрать только те, где кол-во >= N.
 

kolllak

Client
Регистрация
16.08.2011
Сообщения
41
Благодарностей
5
Баллы
8
у меня оба варианта падают с ошибкой
первый вариант
Код:
Ошибка в действии "****" "Неявное преобразование типа "string" в "int" невозможно". [Строка: 2; Cтолбец: 11]
второй вариант
Код:
Ошибка в действии "****" "Неявное преобразование типа "System.Collections.Generic.List<string>" в "ZennoLab.InterfacesLibrary.ProjectModel.IZennoList" невозможно. Существует явное преобразование (возможно, отсутствует приведение)". [Строка: 7; Cтолбец: 5]
суть ошибки понимаю, погуглил но так и не разобрался с применением конверта и парсинга( кто может помочь?

забыл уточнить, мне нужно подсчитать количество вхождения фразы/слова.
делать предварительно замену искомого на цифру?
 
Последнее редактирование:

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Код:
Ошибка в действии "****" "Неявное преобразование типа "System.Collections.Generic.List<string>" в "ZennoLab.InterfacesLibrary.ProjectModel.IZennoList" невозможно. Существует явное преобразование (возможно, отсутствует приведение)". [Строка: 7; Cтолбец: 5]
Так попробуй.
Код:
List<string> lst = project.Lists["Список 1"];
int kol = 2; // N
lst = lst
    .GroupBy(i => i)
    .Where(i => i.Count() >= kol)
    .Select(i => i.Key)
    .ToList();
 
  • Спасибо
Реакции: kolllak

kolllak

Client
Регистрация
16.08.2011
Сообщения
41
Благодарностей
5
Баллы
8
((
Код:
Ошибка в действии "CS0266" "Неявное преобразование типа "ZennoLab.InterfacesLibrary.ProjectModel.IZennoList" в "System.Collections.Generic.List<string>" невозможно. Существует явное преобразование (возможно, отсутствует приведение)". [Строка: 0; Cтолбец: 20]
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 106
Баллы
113
((
Код:
Ошибка в действии "CS0266" "Неявное преобразование типа "ZennoLab.InterfacesLibrary.ProjectModel.IZennoList" в "System.Collections.Generic.List<string>" невозможно. Существует явное преобразование (возможно, отсутствует приведение)". [Строка: 0; Cтолбец: 20]
Первую строку заменить на
Код:
List<string> lst = project.Lists["Список 1"].ToList();
PS. И код Radzhab'а работает нормально!
 
  • Спасибо
Реакции: kolllak

kolllak

Client
Регистрация
16.08.2011
Сообщения
41
Благодарностей
5
Баллы
8
Dimionix, он отработал без ошибок, ура, но список не изменился(, как посмотреть результат выполнения? извиняюсь что отвлекаю но в о многих проектах треубется расставить приоритет, а количество вхождений позволяет сформировать персональный топ..

вот к примеру список доменов (пришлось ужать не загружал чисто текстовик)
там 160 тыс. строк, при этом специально не чистил дубли. После выполнения их остается столько же при любом заданном пороге количества вхождений(
без дублей там порядка 30 тыс., т.е. пространство для работы есть..
 

Вложения

Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113
C#:
var lst = project.Lists["Список 1"];
int kol = 2; // N

List<string> list = lst
    .GroupBy(i => i)
    .Where(i => i.Count() >= kol)
    .Select(i => i.Key)
    .ToList();

lst.Clear();
lst.AddRange(list);
может так
 
  • Спасибо
Реакции: kolllak

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 106
Баллы
113
C#:
var lst = project.Lists["Список 1"];
int kol = 2; // N

List<string> tmpList = lst
    .GroupBy(i => i)
    .Where(i => i.Count() >= kol)
    .Select(i => i.Key)
    .ToList();

lst.Clear();
lst.AddRange(tmpList);
doc опередил:-)
 
  • Спасибо
Реакции: kolllak

kolllak

Client
Регистрация
16.08.2011
Сообщения
41
Благодарностей
5
Баллы
8
спасибо, сам после ночных бдений затупил сравнить варианты, все робит !!! +++
 

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