Digamos que tengo esta matriz,
int[] numbers = {1, 3, 4, 9, 2};
¿Cómo puedo eliminar un elemento por "nombre"? , digamos el número 4?
Incluso ArrayList
no ayudó a eliminar?
string strNumbers = " 1, 3, 4, 9, 2";
ArrayList numbers = new ArrayList(strNumbers.Split(new char[] { ',' }));
numbers.RemoveAt(numbers.IndexOf(4));
foreach (var n in numbers)
{
Response.Write(n);
}
Respuestas:
Si desea eliminar todas las instancias de 4 sin necesidad de conocer el índice:
LINQ: (.NET Framework 3.5)
No LINQ: (.NET Framework 2.0)
Si desea eliminar solo la primera instancia:
LINQ: (.NET Framework 3.5)
No LINQ: (.NET Framework 2.0)
Editar: en caso de que aún no lo haya descubierto, como señaló Malfist, debe apuntar a .NET Framework 3.5 para que los ejemplos de código LINQ funcionen. Si está apuntando a 2.0, debe hacer referencia a los ejemplos que no son de LINQ.
fuente
fuente
También puede convertir su matriz en una lista y llamar a eliminar en la lista. Luego puede volver a convertir a su matriz.
fuente
El código que está escrito en la pregunta tiene un error
Su lista de arrays contiene cadenas de "1" "3" "4" "9" y "2" (observe los espacios)
Por lo tanto, IndexOf (4) no encontrará nada porque 4 es un int, e incluso "tostring" lo convertiría a "4" y no a "4", y no se eliminará nada.
Una lista de arrays es la forma correcta de hacer lo que quiere.
fuente
List<T>
sería mejor que ArrayList, esta parece ser la única respuesta que identifica correctamente el problema que tuvo el OP cuando intentó usar ArrayList para resolver su problema original. El OP entendió que no puede cambiar el tamaño de las matrices, que nadie más parece haber notado, e intentó usar un tipo redimensionable en su lugar, que nadie más parece haber notado, y luego se tropezó con un problema diferente, que nadie más parece Haber notado.La respuesta de Balabaster es correcta si desea eliminar todas las instancias del elemento. Si desea eliminar solo el primero, haría algo como esto:
fuente
Publiqué mi solución aquí .
Esta es una forma de eliminar un elemento de matriz sin copiar a otra matriz, solo en el marco de la misma instancia de matriz:
fuente
Eliminar de una matriz en sí no es simple, ya que luego tiene que lidiar con el cambio de tamaño. Esta es una de las grandes ventajas de usar algo como un
List<int>
en su lugar. ProporcionaRemove
/RemoveAt
en 2.0 y muchas extensiones de LINQ para 3.0.Si puede, refactorice para usar ao
List<>
similar.fuente
Como una extensión genérica, compatible con 2.0:
Uso:
fuente
' Para eliminar elementos de la cadena en función de los valores clave del diccionario. 'Código VB.net
fuente
Puedes hacer de esta manera:
fuente