2014-02-13 4 views
5

Gibt es eine Möglichkeit, eine String-Liste nach der Anzahl der übereinstimmenden Wörter aus einem String-Array zu sortieren?Wie sortieren Sie eine String-Liste nach der Anzahl der Wörter, die mit einem Array in Linq übereinstimmen

var targets = new string[] { "one", "two", "three" }; 
var list = new List<string>(); 
    list.Add("one little pony"); 
    list.Add("one two little pony"); 
    list.Add("one two three little pony"); 
    list.Add("little pony"); 
x = x.OrderByDescending(u => targets.Any(u.Contains)).ToList(); 
foreach(var item in list) 
{ 
Debug.Writeline(item); 
} 

Gibt es eine Möglichkeit, um eine Ausgabe ohne Verwendung eines anderen list oder for Schleife zu erzeugen, zu sortieren

one two three little pony 
one two little pony 
one little pony 
little pony 

Antwort

7

Verwenden Count statt Any:

x = x.OrderByDescending(u => targets.Count(u.Contains)).ToList(); 
+0

Danke Stanley. Ich hatte einen Fehler in dem Code gemacht, den ich ursprünglich eingereicht hatte. Ich habe den Code bearbeitet. Bitte bearbeiten Sie Ihre Antwort von "u.Tags.Contains" zu "u.Contains", um sie für den bearbeiteten Code relevanter zu machen. –

+0

@FloodGravemind getan. –

3

Ein weiterer Ansatz, die sortiert die ursprüngliche Liste mit List.Sort i tatt einen neuen erstellt:

var targets = new HashSet<string> { "one", "two", "three" }; 
list.Sort((s1, s2) => -1 * (s1.Split().Count(targets.Contains) 
       .CompareTo(s2.Split().Count(targets.Contains)))); 

-1 * wird verwendet, absteigend sortiert werden, so dass die meisten Vorkommen an der Spitze. Dies wird auch durch die Leerraumeinfügung von Suchunterzeichenfolgen geteilt, da Sie erwähnt haben, dass Sie Wörter zählen möchten.

Ich habe eine HashSet<string> verwendet, da es effizienter für Nachschlagewerke ist und Duplikate sowieso nicht mehr als einmal gezählt werden sollten.

1
var query = list.OrderByDescending(phrase => 
    phrase.Split().Intersect(targets).Count()); 

Was Sie hier konzeptionell tun, ist die Zählung der Schnittmenge der beiden Sätze von Wörtern. Der Schnittpunkt ist der Satz von Elementen, die in beiden anderen Sets vorhanden sind.

Verwandte Themen