Упорядочить текстовые файлы по заголовку, а затем по телу

У меня есть класс с именем TextFile с Title и Body, которые являются строками.

В моем приложении я хочу, чтобы конечный пользователь мог выполнять поиск в этих файлах.

Я хочу создать свой алгоритм, чтобы сначала упорядочивались файлы с условием поиска в заголовке, а затем файлы с условием поиска в теле.

Пример поискового запроса: 'Фермер'

Файл 1:

Название: 'Фермеры в Европе'

Тело: содержит «Фермер» 50 раз.

Файл 2:

Название: 'Овощная земля'

Тело: содержит «Фермер» 10 раз.

Файл 3:

Название: 'Фермеры мира'

Тело: содержит «Фермер» 10 раз.

Результат будет (в порядке убывания суммы):

  1. Файл 1
  2. Файл 3
  3. Файл 2

Мой вопрос: как мне начать упорядочивать, когда в названии файлов есть поисковый запрос точное количество раз (см. файл 1 и файл 3)?

Как бы я упорядочил сначала по заголовку, а затем по количеству вхождений в теле?


person user3127554    schedule 13.08.2018    source источник
comment
Чтобы повысить свои шансы на получение хорошего ответа, прочитайте это: stackoverflow.com/help/how-to-ask. Что вы пробовали и где вы застряли? Изучите методы LINQ, OrderBy и ThenBy (см. stackoverflow.com/questions/ 3760001/linq-orderby-versus-thenby)   -  person jeroenh    schedule 13.08.2018


Ответы (1)


Просто напишите такой метод, как int performSearch(string searchFor, TextFile file).
Внутри метода вы выполняете поиск в полях.
Чтобы подсчитать совпадения, используйте RegEx или посмотрите здесь: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-count-occurrences-of-a-word-in-a-string-linq

Просто сложите подсчеты и вернитесь. Вы также можете определить некоторые веса.
Например: return (10 * countTitle) + (countBody);
Теперь вы можете отсортировать его следующим образом: textFileList.OrderBy(file => performSearch(searchValue, file)) и вы получите упорядоченный список ваших файлов.

person akop    schedule 13.08.2018