vetor - Como excluir um elemento de uma matriz em c#




vetor c# (7)

Vamos dizer que eu tenho esse array,

int[] numbers = {1, 3, 4, 9, 2};

Como posso excluir um elemento por "nome"? , digamos o número 4?

Mesmo ArrayList não ajudou a apagar?

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);
}

' Para remover itens da string com base nos valores da chave do dicionário. 'Código VB.net

 Dim stringArr As String() = "file1,file2,file3,file4,file5,file6".Split(","c)
 Dim test As Dictionary(Of String, String) = New Dictionary(Of String, String)
 test.Add("file3", "description")
 test.Add("file5", "description")
 stringArr = stringArr.Except(test.Keys).ToArray()

A remoção de um array em si não é simples, pois você precisa lidar com o redimensionamento. Esta é uma das grandes vantagens de usar algo como uma List<int> . Ele fornece Remove / RemoveAt em 2.0 e muitas extensões LINQ para 3.0.

Se você puder, refatorar para usar uma List<> ou similar.


Como uma extensão genérica, compatível com 2.0:

using System.Collections.Generic;
public static class Extensions {
    //=========================================================================
    // Removes all instances of [itemToRemove] from array [original]
    // Returns the new array, without modifying [original] directly
    // .Net2.0-compatible
    public static T[] RemoveFromArray<T> (this T[] original, T itemToRemove) {  
        int numIdx = System.Array.IndexOf(original, itemToRemove);
        if (numIdx == -1) return original;
        List<T> tmp = new List<T>(original);
        tmp.RemoveAt(numIdx);
        return tmp.ToArray();
    }
}

Uso:

int[] numbers = {1, 3, 4, 9, 2};
numbers = numbers.RemoveFromArray(4);

Eu postei minha solução here .

Esta é uma maneira de excluir um elemento da matriz sem copiar para outra matriz - apenas no quadro da mesma instância da matriz:

    public static void RemoveAt<T>(ref T[] arr, int index)
    {
        for (int a = index; a < arr.Length - 1; a++)
        {
            // moving elements downwards, to fill the gap at [index]
            arr[a] = arr[a + 1];
        }
        // finally, let's decrement Array's size by one
        Array.Resize(ref arr, arr.Length - 1);
    }

Você pode fazer desta maneira:

int[] numbers= {1,3,4,9,2};     
List<int> lst_numbers = new List<int>(numbers);
int required_number = 4;
int i = 0;
foreach (int number in lst_numbers)
{              
    if(number == required_number)
    {
        break;
    }
    i++;
}
lst_numbers.RemoveAt(i);
numbers = lst_numbers.ToArray();        

Você também pode converter sua matriz em uma lista e chamar a remoção na lista. Você pode então converter de volta para sua matriz.

int[] numbers = {1, 3, 4, 9, 2};
var numbersList = numbers.ToList();
numbersList.Remove(4);

int[] numbers = { 1, 3, 4, 9, 2 };
numbers = numbers.Except(new int[]{4}).ToArray();






arrays