Digamos que eu tenho essa matriz,
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 excluir?
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);
}
Respostas:
Se você deseja remover todas as instâncias de 4 sem precisar conhecer o índice:
LINQ: (.NET Framework 3.5)
Não LINQ: (.NET Framework 2.0)
Se você deseja remover apenas a primeira instância:
LINQ: (.NET Framework 3.5)
Não LINQ: (.NET Framework 2.0)
Edit: Apenas no caso de você ainda não ter descoberto, como Malfist apontou, você precisa ter como alvo o .NET Framework 3.5 para que os exemplos de código LINQ funcionem. Se você estiver direcionando para a 2.0, precisará fazer referência aos exemplos que não são do LINQ.
fonte
fonte
Você também pode converter sua matriz em uma lista e chamar remover na lista. Você pode converter novamente para sua matriz.
fonte
O código que está escrito na pergunta possui um bug
Sua lista de matrizes contém seqüências de caracteres de "1" "3" "4" "9" e "2" (observe os espaços)
Portanto, IndexOf (4) não encontrará nada porque 4 é um int, e até "tostring" o converteria em "4" e não "4", e nada será removido.
Uma lista de matrizes é a maneira correta de fazer o que você deseja.
fonte
List<T>
seria melhor que o ArrayList, essa parece ser a única resposta que identifica corretamente o problema que o OP teve ao tentar usar o ArrayList para resolver seu problema original. O OP entendeu que você não pode redimensionar matrizes, que ninguém mais parece ter notado, e tentou usar um tipo redimensionável, que ninguém mais parece ter notado, e depois foi atropelado por um problema diferente, que ninguém mais parece ter notado.A resposta do Balabaster está correta se você deseja remover todas as instâncias do elemento. Se você deseja remover apenas o primeiro, faça algo assim:
fonte
Postei minha solução aqui .
Esta é uma maneira de excluir um elemento da matriz sem copiar para outra matriz - apenas no quadro da mesma instância da matriz:
fonte
Remover de uma matriz em si não é simples, pois você precisará lidar com o redimensionamento. Essa é uma das grandes vantagens de usar algo como um
List<int>
. Ele forneceRemove
/RemoveAt
no 2.0 e muitas extensões LINQ para 3.0.Se você puder, refatorar para usar um
List<>
ou similar.fonte
Como uma extensão genérica, compatível com 2.0:
Uso:
fonte
' Para remover itens da cadeia de caracteres com base nos valores de chave do dicionário. Código VB.net
fonte
Você pode fazer desta maneira:
fonte