¿Cuál sería la mejor manera de buscar en un string[]
para ver si contiene un elemento? Esta fue mi primera oportunidad. Pero quizás haya algo que estoy pasando por alto. El tamaño de la matriz no superará los 200 elementos.
bool isStringInArray(string[] strArray, string key)
{
for (int i = 0; i <= strArray.Length - 1; i++)
if (strArray[i] == key)
return true;
return false;
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.Contains(foo)
Sé que esto es antiguo, pero quería que los nuevos lectores supieran que hay un nuevo método para hacer esto usando métodos genéricos y de extensión.
Puede leer la publicación de mi blog para ver más información sobre cómo hacer esto, pero la idea principal es la siguiente:
Al agregar este método de extensión a su código:
puede realizar su búsqueda así:
Funciona en cualquier tipo (siempre que cree un buen método igual). Cualquier tipo de valor seguro.
fuente
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
lo que quiero hacer es mirar a través de la tabla de datos who en la primera columna para ver si los valores no terminan en ninguna de las siguientes cadenas ... si no lo hacen, entonces quiero devolver una cadena que indique que falta un valor,.00
por ejemplo, usando su ejemplo, parece que no puedo hacer que este funcione, es un poco más complicado ya que no quiero devolver un bool Modifiqué su método para devolver una cadena pero aún no funciona ninguna sugerenciapublic static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Simplemente busca la función Array.Exists (o el método de extensión Contiene si está utilizando .NET 3.5, que es un poco más conveniente).
fuente
Linq (para s & g):
o, dependiendo de los requisitos
fuente
¿Está ordenada la matriz? Si es así, puede hacer una búsqueda binaria . Aquí también está la implementación de .NET. Si la matriz está ordenada, una búsqueda binaria mejorará el rendimiento sobre cualquier solución iterativa.
fuente
Las matrices son, en general, una estructura de datos deficiente para usar si desea preguntar si un objeto en particular está en la colección o no.
Si va a realizar esta búsqueda con frecuencia, puede que valga la pena utilizar
Dictionary<string, something>
una matriz en lugar de una. Las búsquedas en un diccionario son O (1) (tiempo constante), mientras que la búsqueda en la matriz es O (N) (toma un tiempo proporcional a la longitud de la matriz).Incluso si la matriz tiene solo 200 elementos como máximo, si realiza muchas de estas búsquedas, es probable que el Diccionario sea más rápido.
fuente
También puede usar LINQ para iterar sobre la matriz. o puede utilizar el método Find, que necesita un delegado para buscarlo. Sin embargo, creo que el método de búsqueda es un poco más caro que simplemente recorrerlo.
fuente
Como se mencionó muchas veces en el hilo anterior, depende del marco en uso. .Net Framework 3 y superior tiene los métodos .Contains () o Exists () para matrices. Para otros marcos a continuación, puede hacer el siguiente truco en lugar de recorrer la matriz ...
No estoy muy seguro de la eficiencia ... Dave
fuente
Esto es más rápido que iterar a través de la matriz manualmente:
fuente
Si no quiere o simplemente no puede usar Linq, también puede usar la
Array.Exists(...);
función estática :https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Cuando el predicado devuelva verdadero, una vez, catInside también será verdadero.
fuente