Eliminar elemento de una matriz regular
Tengo una variedad de objetos Foo. ¿Cómo elimino el segundo elemento de la matriz?
Necesito algo similar RemoveAt()
pero para una matriz normal.
Si no desea utilizar Lista:
var foos = new List<Foo>(array);
foos.RemoveAt(index);
return foos.ToArray();
Podrías probar este método de extensión que en realidad no he probado:
public static T[] RemoveAt<T>(this T[] source, int index)
{
T[] dest = new T[source.Length - 1];
if( index > 0 )
Array.Copy(source, 0, dest, 0, index);
if( index < source.Length - 1 )
Array.Copy(source, index + 1, dest, index, source.Length - index - 1);
return dest;
}
Y úsalo como:
Foo[] bar = GetFoos();
bar = bar.RemoveAt(2);
La naturaleza de las matrices es que su longitud es inmutable. No puede agregar ni eliminar ninguno de los elementos de la matriz.
Tendrá que crear una nueva matriz que sea un elemento más corta y copiar los elementos antiguos a la nueva matriz, excluyendo el elemento que desea eliminar.
Por lo que probablemente sea mejor utilizar una lista en lugar de una matriz.
Utilizo este método para eliminar un elemento de una matriz de objetos. En mi situación, mis matrices son pequeñas. Entonces, si tiene matrices grandes, es posible que necesite otra solución.
private int[] RemoveIndices(int[] IndicesArray, int RemoveAt)
{
int[] newIndicesArray = new int[IndicesArray.Length - 1];
int i = 0;
int j = 0;
while (i < IndicesArray.Length)
{
if (i != RemoveAt)
{
newIndicesArray[j] = IndicesArray[i];
j++;
}
i++;
}
return newIndicesArray;
}
Solución LINQ de una línea:
myArray = myArray.Where((source, index) => index != 1).ToArray();
En 1
ese ejemplo, es el índice del elemento que se va a eliminar; en este ejemplo, según la pregunta original, el segundo elemento (siendo 1
el segundo elemento en la indexación de matrices de base cero de C#).
Un ejemplo más completo:
string[] myArray = { "a", "b", "c", "d", "e" };
int indexToRemove = 1;
myArray = myArray.Where((source, index) => index != indexToRemove).ToArray();
Después de ejecutar ese fragmento, el valor de myArray
será { "a", "c", "d", "e" }
.