Frage Überprüfen Sie, ob die Liste ein Element enthält, das eine Zeichenkette enthält und dieses Element abruft


Bei der Suche nach einer Antwort auf diese Frage habe ich ähnliche gefunden, die LINQ verwenden, aber ich konnte sie nicht vollständig verstehen (und sie somit implementieren), da ich mich damit nicht auskenne. Was ich im Grunde gerne möchte, ist folgendes:

  1. Überprüfen Sie, ob ein Element einer Liste eine bestimmte Zeichenfolge enthält.
  2. Wenn dies der Fall ist, besorgen Sie sich dieses Element.

Ich weiß ehrlich nicht, wie ich das machen würde. Was ich mir einfallen lassen kann ist (funktioniert natürlich nicht):

if (myList.Contains(myString))
    string element = myList.ElementAt(myList.IndexOf(myString));

Ich weiß, WARUM es nicht funktioniert:

  • myList.Contains() kommt nicht zurück true, da überprüft wird, ob ein ganzes Element der Liste mit der angegebenen Zeichenfolge übereinstimmt.
  • myList.IndexOf() wird kein Vorkommen finden, da es, wie es wieder der Fall ist, nach einem Element sucht, das der Zeichenkette entspricht.

Trotzdem habe ich keine Ahnung, wie ich dieses Problem lösen kann, aber ich denke, ich werde LINQ verwenden müssen, wie es in ähnlichen Fragen vorgeschlagen wurde. Wenn das hier der Fall ist, möchte ich, dass der Beantworter mir die Verwendung von LINQ in ihrem Beispiel erklärt (wie gesagt, ich habe mich in meiner Zeit mit C # nicht darum gekümmert). Vielen Dank im Voraus Jungs (und Mädels?).

EDIT: Ich habe eine Lösung gefunden; Einfach die Liste durchlaufen, prüfen, ob das aktuelle Element die Zeichenfolge enthält und dann eine Zeichenfolge, die dem aktuellen Element entspricht. Ich frage mich jedoch, gibt es einen effizienteren Weg als das?

string myString = "bla";
string element = "";

for (int i = 0; i < myList.Count; i++)
{
    if (myList[i].Contains(myString))
        element = myList[i];
}

75
2017-09-12 14:39


Ursprung


Antworten:


Sie sollten Linq hier verwenden können:

var matchingvalues = myList
    .Where(stringToCheck => stringToCheck.Contains(myString));

Wenn Sie einfach den ersten passenden Artikel zurückgeben möchten:

var match = myList
    .FirstOrDefault(stringToCheck => stringToCheck.Contains(myString));

if(match != null)
    //Do stuff

117
2017-09-12 14:44



Die grundlegende Antwort lautet: Sie müssen eine Schleife durchlaufen und prüfen, ob ein Element die angegebene Zeichenfolge enthält. Also, sagen wir, der Code ist:

foreach(string item in myList)
{
    if(item.Contains(myString))
       return item;
}

Der äquivalente, aber knappe Code ist:

mylist.Where(x => x.Contains(myString)).FirstOrDefault();

Hier ist x ein Parameter, der sich wie "Element" im obigen Code verhält.


16
2017-09-12 14:46



string result = myList.FirstOrDefault(x => x == myString)
if(result != null)
{
  //found
}

7
2017-09-12 14:43



for (int i = 0; i < myList.Length; i++)
{
    if (myList[i].Contains(myString)) // (you use the word "contains". either equals or indexof might be appropriate)
    {
        return i;
    }
}

Alte Mode Loops sind fast immer die schnellsten.


6
2017-09-12 14:44



Wenn Sie eine Liste von Zeichenfolgen möchten, die Ihre Zeichenfolge enthalten:

var newList = myList.Where(x => x.Contains(myString)).ToList();

Eine andere Option ist die Verwendung von Linq FirstOrDefault

var element = myList.Where(x => x.Contains(myString)).FirstOrDefault();

Denk daran, dass Contains Methode ist Groß- und Kleinschreibung.


3
2017-09-12 14:44



Sie könnten Linqs benutzen FirstOrDefault Erweiterungsmethode:

string element = myList.FirstOrDefault(s => s.Contains(myString));

Dadurch wird das erste Element zurückgegeben, das die Teilzeichenfolge enthält myString, oder null wenn kein solches Element gefunden wird.

Wenn Sie nur den Index benötigen, verwenden Sie die List<T> Klasse FindIndex Methode:

int index = myList.FindIndex(s => s.Contains(myString));

Dies gibt den Index des ersten Elements zurück, das die Teilzeichenfolge enthält myString, oder -1 wenn kein solches Element gefunden wird.


2
2017-09-12 14:44



Sie können verwenden

var match=myList.Where(item=>item.Contains("Required String"));
foreach(var i in match)
{
//do something with the matched items
}

LINQ bietet Ihnen Funktionen zum Abfragen von Datensammlungen. Sie können Syntax wie eine Datenbankabfrage (select, wo, etc) für eine Sammlung verwenden (hier die Auflistung (Liste) von Zeichenketten).

also machst du es wie "hol mir Gegenstände von der Liste, wo es eine bestimmte Bedingung erfüllt"

innerhalb der Wo Sie einen "Lambda-Ausdruck" verwenden

kurz zu sagen Lambda-Ausdruck ist etwas wie (Eingangsparameter => Rückgabewert)

Für einen Parameter "item" gibt es also "item.Contains (" erforderliche Zeichenfolge ")" zurück. Daher gibt es true zurück, wenn das Element die Zeichenfolge enthält und dadurch aus der Liste ausgewählt wird, da es die Bedingung erfüllt.


1
2017-09-12 14:56