2015-07-25 6 views
-2

Я хотел бы написать запрос LINQ, который будет возвращать записи с наиболее согласованными словами, упорядоченными по количеству совпадающих слов. и слова не должны быть в порядкеСовпадение с большинством слов соответствия с LINQ

вход:

"word3 word2" 

массив строк:

"word1 word2 word3 word4 word5" 
"word1 word2" 
"word4 word5" 
"word1 word4 word5" 

выход будет

"word1 word2 word3 word4 word5" 
"word1 word2" 

Является ли это выполнимо с помощью LINQ ?

+2

Вы пробовали что-нибудь или просто хотите, чтобы мы сделали вашу работу/домашнее задание? – EZI

+0

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

+0

каких-либо советов о том, как это написать? – Jim

ответ

0

Это может быть сделано с Linq.

Пример:

var wantedWords = "word3 word2".Split(); 
var strings = new List<string> 
{ 
    "word1 word2 word3 word4 word5", 
    "word1 word2", 
    "word4 word5", 
    "word1 word4 word5" 
}; 
var result = from s in strings 
      let words = s.Split() 
      select new 
      { 
       String = s, 
       MatchedCount = wantedWords.Count(ww => words.Contains(ww)) 
      } into e 
      where e.MatchedCount > 0 
      orderby e.MatchedCount descending 
      select e.String; 
0

Я нашел, что эта комбинация Linq и Regex выполнила эту работу. Возьмите входной сигнал и превратите его в шаблон для использования в Where()Linq.

В этом примере вход включен в схему

"word3|word2" 

Мы используем, что, чтобы найти строки в массиве, которые имеют word3 ИЛИ (Символ означает, трубы или в Regex) word2.

string input = "word3 word2"; 
string[] array = 
{ 
    "word1 word2 word3 word4 word5", 
    "word1 word2", 
    "word4 word5", 
    "word1 word4 word5" 
}; 

string pattern = input.Replace(" ", "|"); 
List<string> results = array.Where(a => Regex.Match(a, pattern).Success).ToList(); 
results.ForEach(Console.WriteLine); 

Результаты:

word1 word2 word3 word4 word5 
word1 word2