2010-10-12 62 views
19

.NET 2string array.Contains?

string[] myStrings = GetMyStrings();  
string test = "testValue"; 

¿Cómo puedo verificar si contiene myStringstest?

+0

vb.net y C# no son el mismo idioma ... –

+0

@ Chris Thompson: esto es eddy556 .... – serhio

+1

prueba de CI? una pregunta de un tipo ~ 4K ?! (El uso de .NET 2.0 no está claro) – Xaqron

Respuesta

2
bool ContainsString(string[] arr, string testval) 
{ 
    if (arr == null) 
     return false; 
    for (int i = arr.Length-1; i >= 0; i--) 
     if (arr[i] == testval) 
      return true; 
    return false; 
} 

Y esto tendrá el mejor rendimiento de la historia. : P

+0

leer atentamente;) – serhio

+0

@serhio. Yo si. Tres veces. Usted solicita determinar si una cadena particular está o no contenida en la matriz de cadenas. Así es como lo haces. Si esto no es lo que necesita, por favor, corrija su pregunta. –

+0

Simplemente cambie la matriz de prueba a myStrings y esta respuesta funcionará. ¿Cómo no funciona para usted? –

9

En lugar de utilizar una matriz estática, se puede utilizar una lista:

List<string> myStrings = new List<string>(GetMyStrings()); 
if(myStrings.Contains("testValue")) 
{ 
    // Do Work 
} 
+0

Uso 'string [] letters =" a, b, c, d ".Split();'. ¿Es óptimo para una función tan elemental usar conversiones de Array to List? – serhio

+5

@serhio - Codifique primero, optimice luego si es necesario. A menos que esté construyendo estas listas a gran escala, realmente no debería haber ningún problema. –

-2

Asumo que desea comprobar si los elementos de la matriz contiene un cierto valor (de prueba). Si es así, quiere construir un bucle simple. De hecho, creo que deberías click here.

10

Aquí hay un enfoque compatible con .NET 2.0. El uso de Array.Find devolverá nulo si no se encuentra el valor.

C# Enfoque

string[] myStrings = { "A", "B", "testValue" }; 
string test = "testValue"; 
string result = Array.Find(myStrings, delegate(string s) { return s == test; }); 
Console.WriteLine("Result: " + result); 

Si necesita una utilización sensible a mayúsculas partido s.Equals(test, StringComparison.InvariantCultureIgnoreCase).

EDIT: con VB.NET 2.0 se requiere más esfuerzo ya que no admite delegados anónimos. En cambio, necesitaría agregar un Function y usar AddressOf para apuntar a él. Debería establecer el testValue como miembro o propiedad, ya que no se pasará al método de predicado. En el siguiente ejemplo, uso Array.Exists.

Enfoque VB.NET

' field or property ' 
Dim test As String = "testValue" 

Sub Main 
    Dim myStrings As String() = { "A", "B", "testValue" }  
    Dim result As Boolean = Array.Exists(myStrings, AddressOf ContainsValue) 
    Console.WriteLine(result) 
End Sub 

' Predicate method ' 
Private Function ContainsValue(s As String) As Boolean 
    Return s = test 
End Function 
+0

gracias por la solución VB, incluso si necesito C# uno, tal vez para personas VB será útil ... – serhio

+0

Me perdí el requisito de 2.0 y VB. Esto funcionará, por supuesto, pero una llamada a Array.IndexOf podría ser más simple. –

+0

@Chris estuvo de acuerdo. Esto está más cerca de un tipo de verificación 'Contiene', pero requiere más esfuerzo que' IndexOf'. –

18

En .NET 2.0, se puede hacer lo siguiente si desea que el índice:

int index = Array.FindIndex(
    myStrings, 
    delegate(string s) { return s.Equals(test); } 
); 

index habrá -1 si myStrings no contiene test .

Si solamente desea para comprobar la existencia:

bool exists = Array.Exists(
    myStrings, 
    delegate(string s) { return s.Equals(test); } 
); 
1

aquí es casi exactamente la misma pregunta en MSDN. Find String in String Array Como otros han dicho que realmente tiene dos opciones: 1) el uso de una lista de más fácil comprobar 2) Bucle a través de su matriz para encontrar la cadena

0

¿Qué tal esto:

Sub Main 
    Dim myStrings(4) As String 
    myStrings(0) = "String 1" 
    myStrings(1) = "String 2" 
    myStrings(2) = "testValue" 
    myStrings(3) = "String 3" 
    myStrings(4) = "String 4" 

    Dim test As String = "testValue" 

    Dim isFound As Boolean = Array.IndexOf(myStrings, test) >= 0 

    If isFound Then 
     Console.WriteLine("Found it!") 
    End If 
End Sub 

Esto debería trabajo para .Net 2.0 y VB.Net.

+1

El problema del OP es que no es .NET 2.0 compatible con las lambdas. –

+0

Si el OP usa VS2008, entonces pueden usar lambdas cuando se dirigen a .NET 2.0. – onedaywhen

1

puede utilizar Array.BinarySearch como se describe a continuación.

string[] strArray = GetStringArray(); 
     string strToSearch ="test"; 
     Array.BinarySearch(strArray, strToSearch); 
+0

+1. La variante genérica puede ser incluso mejor. – serhio

+1

Funcionará solo si la matriz está ordenada – Jan

7

pensaba que iba a añadir otro a la mezcla, disponible por primera vez en .NET 3.5, creo:

Enumerable.Contains(myStrings.ToArray(), test) 
+1

Lo que esto significa es que mediante 'using System.Linq', puede escribir' myStrings.Contains (test) ', ya que' Enumerable.Contains' es un método de extensión. (BTW, .NET versión 3.5 usa el mismo CLR que .NET versión 2.0, por lo que generalmente funciona en ".NET 2.0"). –

Cuestiones relacionadas