2 Stimmen

Schleife durch ein Array und Suche nach einer Teilzeichenkette

Wenn ich ein Array habe

array[0] = "jack"; array[1] = "jill"; array[2] = "lisa"; array[2] = "jackie";

und ich möchte alle Elemente mit "ack" darin finden.

in diesem Fall würde es Folgendes zurückgeben

"Jack", "Jackie".

Wie lässt sich dies am schnellsten bewerkstelligen?

7voto

itowlson Punkte 72130
array.Where(s => s.Contains("ack"));

(Probleme mit der Lokalisierung/String-Kollation/Groß-/Kleinschreibung werden geflissentlich ignoriert).

1voto

ChaosPandion Punkte 75527

Dies sollte ein wenig schneller sein als eine LINQ-Lösung.

var list = new List<string>();
foreach(string s in array)
{
    if ((s ?? "").Contains("ack"))
    {
        list.Add(s);
    }
}

0voto

Joel Punkte 11043

Ich kenne mich nicht wirklich mit C# aus. Hier ist eine grundlegende Low-Level-Ansatz in Pseudocode:

function boolean contains_string(string haystack, string needle)
  int needleIndex
  int haystackIndex
  for haystackIndex from 0 to haystack.length-needle.length
    for needleIndex from 0 to needle.length
      if haystack[haystackIndex+needleIndex] != needle[needleIndex]
        break
      end if
    end for
    if needleIndex == needle.length-1
      return TRUE
    end if
  end for
  return FALSE
end function

for each element in array
  if contains_string(element, "ack")
    new_array.push element
  end if
end for

Enthält mit ziemlicher Sicherheit Bugs.

0voto

cdiggins Punkte 16400

Ich glaube, dies sollte schneller sein als die LINQ-Lösung.

IEnumerable<string> Containing(string[] xs, string sub) {
  foreach(string s in array)
  if (s.Contains(sub))
    yield return s;
}

Ich gehe davon aus, dass keine Null-Strings in xs .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X