2016-09-20 3 views
0

Ich versuche, eine Liste der Zeichenfolgen zu suchen. Ich möchte in der Lage sein, alle gefundenen Ergebnisse zurückzugeben, die Informationen aus einer Zeichenfolge enthalten. Zum Beispiel:Suchen in einer Liste für eine bestimmte Zeichenfolge

(Ich habe bereits eine Liste mit Werten) Liste Strings enthält

"Hund", "Katze", "Doghouse", "Doge", "Maus"

ich möchte einen Weg, um eine Zeichenfolge zu überprüfen, zum Beispiel:

string dog = "dog" 

und die Werte zurück:

"Hund", "Doghouse", "Doge"

Dies ist, was ich zumindest so weit, habe den Abschnitt Ich brauche Hilfe auf.

Console.WriteLine("What would you like to search for (Title: Full Title; Author: first, last): "); 
search = Console.ReadLine(); 

var results = bookList.Where(x => x.Contains(search)).ToList(); 
if (results != null) 
{ 
    Console.WriteLine(results); 
    //i--; 
    search = String.Empty; 
    clearvars results; 
    Console.WriteLine("Press Enter to continue"); 
    Console.ReadLine(); 
    continue; 
} 

search ist eine leere Zeichenfolge

bookList mein List<string> ist

i ist nur ein Zähler, nicht wirklich notwendig für dieses

ich in einer for Schleife diese ganze Sache tue, wenn Das ändert alles.

+2

Bitte senden Sie eine [ mcve] mit den genauen Buchtiteln, die Sie registriert haben, sowie mit der genauen Zeichenfolge, nach der Sie suchen. Jetzt sehen wir auch nicht, also müssen wir raten, warum es nicht funktioniert. Sind Sie sich beispielsweise bewusst, dass "string.Contains" Groß- und Kleinschreibung unterscheidet, wenn also beispielsweise der Buchtitel in der Liste "Doghouse" lautet, hat eine Suche nach "dog" (kleingeschrieben "d") gewonnen. t übereinstimmen. –

+0

Im Moment gibt der Benutzer Buchtitel ein. Es ist mir egal, ob die Groß-/Kleinschreibung beachtet wird. Was Sie suchen, wird auch vom Benutzer eingegeben. Sorry ... – DatDudeAgain

+1

Du hast mich missverstanden. Ich wollte nicht, dass Sie Ihr Programm ändern, ich meine, dass Sie ein Beispiel für diese Frage erstellen, die das gleiche Problem aufweist, aber so vollständig ist, dass wir uns den Code ansehen können. Zum Beispiel, wenn Sie später sagen, dass "Oh, übrigens, der Benutzer gibt den Buchtitel Doghouse, und dann sucht er nach Hund", dann sind wir zurück zu meinem Kommentar oben. Da wir keine Ahnung haben, was der Benutzer tut, können Sie bitte einen bestimmten Fall für uns reproduzieren, damit wir versuchen können, Ihnen zu helfen? Ansonsten können wir nur raten. –

Antwort

1

Sie müssen sich auf jedem Element des Ergebnisses (die results Variable) zu durchlaufen.

Console.WriteLine("What would you like to search for (Title: Full Title; Author: first, last): "); 
search = Console.ReadLine(); 
var results = bookList.Where(x => x.Contains(search)).ToList(); 
if (results != null) 
{ 
    foreach (var result in results) 
    { 
     Console.WriteLine(result); 
    } 
    Console.WriteLine("Press Enter to continue"); 
    Console.ReadLine(); 
} 

Sie müssen sich auf results iterieren, weil es eine Liste ist. Wenn Sie eine Liste an Console.WriteLine() wie folgt übergeben: Console.WriteLine(results) wird die Methode ToString() auf results aufgerufen. Aufruf ToString() auf einer Liste gibt: System.Collections.Generic.List1[System.String] was ist, was Sie wahrscheinlich auf Ihrer Konsole gesehen haben.

System.Collections.Generic.List1[System.String] ist eine Zeichenfolgendarstellung eines Listenobjekts, aber was Sie wirklich interessieren, sind die Elemente der Liste. Aus diesem Grund müssen Sie auf der Liste und jedes Element separat drucken.

Sie können auch alle Elemente der results Liste in einen String verbinden und es dann drucken:

var allResultsInOneString = string.Join(", ", results); 
Console.WriteLine(allResultsInOneString); 
+0

Vielen Dank, das funktioniert perfekt. Danke, dass Sie alles erklärt haben. – DatDudeAgain

+0

@DatDudeAgain du bist willkommen – inwenis

1

Sie benötigen eine Schleife wie foreach durch das Ergebnis iterieren:

foreach (var item in results) 
{ 
    Console.WriteLine(item); 
} 

Denn wie gesagt, Sie Ich möchte alle gefundenen Ergebnisse zurückgeben können, aber da die results ist eine Liste der strings, so dass Sie müssen die Liste durchlaufen, um jedes Element in der Liste zu drucken.

+0

Was wäre in diesem Fall Artikel? – DatDudeAgain

+1

@DatDudeAgain Nachdem Sie sich die [Documentation for foreach] (https://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx) angeschaut haben, sollten Sie in der Lage sein zu bestimmen, was 'item' –

+0

@SamIam Thanks ist ! – DatDudeAgain

0

Hier ist eine Möglichkeit:

string[] searchList = new[] { "dog", "cat", "doghouse", "doge", "mouse" }; 
string searchString = "dog"; 
var matches = searchList.Where((x) => Regex.IsMatch(x, searchString)); 
0

Wenn Sie Linq verwenden möchten, können Sie dies auch tun:

bookList.Where(x => x.Contains(search)).ToList().ForEach(x => Console.WriteLine(x)); 
Verwandte Themen