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?
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"));
(Cheerfully ignoring any localisation / string collation / case sensitivity issues.)
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
.