it-swarm.com.de

Überprüfen Sie, ob die Liste ein Element enthält, das eine Zeichenfolge enthält, und rufen Sie dieses Element ab

Auf der Suche nach einer Antwort auf diese Frage bin ich mit LINQ auf ähnliche gestoßen, konnte sie jedoch nicht vollständig verstehen (und daher implementieren), da ich nicht mit ihr vertraut bin. Was ich grundsätzlich gerne möchte, ist Folgendes:

  1. Überprüfen Sie, ob ein Element einer Liste eine bestimmte Zeichenfolge enthält.
  2. Wenn ja, holen Sie sich dieses Element.

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

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

Ich weiß, warum es nicht funktioniert:

  • myList.Contains() gibt nicht true zurück, da überprüft wird, ob ein ganzes Element der Liste mit der von mir angegebenen Zeichenfolge übereinstimmt.
  • myList.IndexOf() findet kein Vorkommen, da, wie es auch hier der Fall ist, nach einem Element gesucht wird, das mit der Zeichenfolge übereinstimmt.

Ich habe noch keine Ahnung, wie ich dieses Problem lösen soll, aber ich denke, ich muss LINQ verwenden, wie in ähnlichen Fragen vorgeschlagen. Wenn dies hier der Fall ist, möchte ich, dass der Antwortende mir die Verwendung von LINQ in seinem 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; Durchlaufen Sie einfach die Liste, überprüfen Sie, ob das aktuelle Element die Zeichenfolge enthält, und legen Sie dann eine Zeichenfolge fest, die dem aktuellen Element entspricht. Ich frage mich jedoch, ob es einen effizienteren Weg gibt als diesen?

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

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

Sie sollten in der Lage sein, Linq hier zu verwenden:

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

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

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

if(match != null)
    //Do stuff
169
Dave Bish

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

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

Der äquivalente, aber knappe Code lautet:

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

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

26
userda
string result = myList.FirstOrDefault(x => x == myString)
if(result != null)
{
  //found
}
12
Chris
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;
    }
}

Old Fashion Loops sind fast immer die schnellsten.

9
McKay

Wenn Sie eine Liste von Zeichenfolgen wünschen, die Ihre Zeichenfolge enthalten:

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

Eine weitere Option ist die Verwendung von Linq FirstOrDefault

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

Beachten Sie, dass bei der Contains -Methode zwischen Groß- und Kleinschreibung unterschieden wird.

4

Sie könnten Linqs FirstOrDefault -Erweiterungsmethode verwenden:

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

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

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

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

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

2
p.s.w.g

Sie sollten in der Lage sein, so etwas zu verwenden, es hat für mich in Ordnung funktioniert:

var valuesToMatch = yourList.Where(stringCheck => stringCheck.Contains(myString));

oder so etwas, wenn Sie schauen müssen, wo es nicht passt.

 var valuesToMatch = yourList.Where(stringCheck => !stringCheck.Contains(myString));
1
Goku

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 die Möglichkeit, jede Sammlung von Daten abzufragen. Sie können eine Syntax wie eine Datenbankabfrage (select, where, etc) für eine Sammlung (hier die Sammlung (Liste) von Zeichenfolgen) verwenden.

also machst du wie: "Hol mir Gegenstände von der Liste, wenn sie eine gegebene Bedingung erfüllen."

innerhalb der Wo Sie einen "Lambda-Ausdruck" verwenden

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

für einen Parameter "item" wird also "item.Contains (" required string ")" zurückgegeben. Es wird also true zurückgegeben, wenn das Element die Zeichenfolge enthält, und dadurch wird es aus der Liste ausgewählt, da es die Bedingung erfüllt.

1
Nithin Nayagam

Viele gute Antworten hier, aber ich benutze eine einfache mit Exists, wie folgt:

foreach (var setting in FullList)
{
    if(cleanList.Exists(x => x.ProcedureName == setting.ProcedureName)) 
       setting.IsActive = true; // do you business logic here 
    else
       setting.IsActive = false;
    updateList.Add(setting);
}
1
Ali

Um es einfach zu halten, benutze dies;

foreach(string item in myList)//Iterate through each item.
{
 if(item.Contains("Search Term")//True if the item contains search pattern.
 {
   return item;//Return the matched item.
 }
}

Alternativ können Sie dazu die for-Schleife verwenden.

    for (int iterator = 0; iterator < myList.Count; iterator++)
    {
        if (myList[iterator].Contains("String Pattern"))
        {
            return myList[iterator];
        }
    }
1
BlackKnight

Ich habe keine Bool-Option in anderen Antworten gesehen, also hoffe ich, dass der folgende Code jemandem hilft.

Benutze einfach Any()

string myString = "test";
bool exists = myList
             .Where(w => w.COLUMN_TO_CHECK.Contains(myString)).Any();
0
Pawel Czapski