.NET 2string array.Contains?
string[] myStrings = GetMyStrings();
string test = "testValue";
¿Cómo puedo verificar si contiene myStrings
test
?
.NET 2string array.Contains?
string[] myStrings = GetMyStrings();
string test = "testValue";
¿Cómo puedo verificar si contiene myStrings
test
?
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
leer atentamente;) – serhio
@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. –
Simplemente cambie la matriz de prueba a myStrings y esta respuesta funcionará. ¿Cómo no funciona para usted? –
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
}
Uso 'string [] letters =" a, b, c, d ".Split();'. ¿Es óptimo para una función tan elemental usar conversiones de Array to List? – serhio
@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. –
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.
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
gracias por la solución VB, incluso si necesito C# uno, tal vez para personas VB será útil ... – serhio
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. –
@Chris estuvo de acuerdo. Esto está más cerca de un tipo de verificación 'Contiene', pero requiere más esfuerzo que' IndexOf'. –
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); }
);
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
¿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.
El problema del OP es que no es .NET 2.0 compatible con las lambdas. –
Si el OP usa VS2008, entonces pueden usar lambdas cuando se dirigen a .NET 2.0. – onedaywhen
he encontrado una respuesta elegante a la página de aquí http://www.dotnettoad.com/index.php?/archives/10-Array.Contains.html. Lo que tienes que hacer en .NET 2.0 es convertir a IList y llamar al método Contiene.
(IList<string> mystrings).Contains(test);
pensaba que iba a añadir otro a la mezcla, disponible por primera vez en .NET 3.5, creo:
Enumerable.Contains(myStrings.ToArray(), test)
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"). –
vb.net y C# no son el mismo idioma ... –
@ Chris Thompson: esto es eddy556 .... – serhio
prueba de CI? una pregunta de un tipo ~ 4K ?! (El uso de .NET 2.0 no está claro) – Xaqron