简体   繁体   中英

loop through an array and find partial string

if i have array

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

and i want to find all elements with "ack" in it.

in this case it would return

"jack", "jackie".

what is the fastest way of doing this?

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

(高兴地忽略任何本地化/字符串排序/区分大小写问题。)

This should be a little bit faster than a LINQ solution.

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

I don't really know C#. Here is a basic low-level approach in pseudo-code:

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

Almost certainly contains bugs.

I believe this should be faster than the LINQ solution.

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

I am assuming no null strings in xs .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM