Eu tenho trabalhado com um string[]
matriz em c # que é retornada de uma chamada de função. Eu poderia transmitir para uma Generic
coleção, mas queria saber se havia uma maneira melhor de fazê-lo, possivelmente usando uma matriz temporária.
Qual é a melhor maneira de remover duplicatas de uma matriz C #?
c#
arrays
duplicates
lomaxx
fonte
fonte
Respostas:
Você poderia usar uma consulta LINQ para fazer isso:
fonte
.Distinct(StringComparer.OrdinalIgnoreCase)
para obter um conjunto distinto de distinção entre maiúsculas e minúsculas.The Distinct() method returns an unordered sequence that contains no duplicate values.
Aqui está a abordagem HashSet <string> :
Infelizmente, esta solução também requer o .NET framework 3.5 ou posterior, pois o HashSet não foi adicionado até essa versão. Você também pode usar array.Distinct () , que é um recurso do LINQ.
fonte
O seguinte código testado e funcional removerá duplicatas de uma matriz. Você deve incluir o espaço para nome System.Collections.
Você pode agrupar isso em uma função, se quiser.
fonte
Se você precisar classificá-lo, poderá implementar uma classificação que também remova duplicatas.
Mata dois coelhos com uma cajadada, então.
fonte
Isso pode depender de quanto você deseja criar a solução - se a matriz nunca for tão grande e você não se importar em classificar a lista, poderá tentar algo semelhante ao seguinte:
fonte
- Esta é a pergunta da entrevista toda vez. Agora eu fiz sua codificação.
fonte
Este é O (n ^ 2) , que não importa para uma lista curta que será inserida em um combo, mas pode ser rapidamente um problema em uma grande coleção.
fonte
fonte
Aqui está uma abordagem O (n * n) que usa o espaço O (1) .
As abordagens hash / linq acima são as que você usaria geralmente na vida real. No entanto, nas entrevistas, eles geralmente querem colocar algumas restrições, por exemplo, espaço constante que exclui hash ou nenhuma API interna - que exclui o uso do LINQ .
fonte
strIn[j] == strIn[i]
) comparará uma string consigo mesma, a menos que seja contabilizada com uma instrução if.Adicione todas as strings a um dicionário e obtenha a propriedade Keys posteriormente. Isso produzirá cada sequência única, mas não necessariamente na mesma ordem em que a entrada original as incluiu.
Se você precisar que o resultado final tenha a mesma ordem que a entrada original, quando considerar a primeira ocorrência de cada sequência, use o seguinte algoritmo:
No final, a lista contém a primeira ocorrência de cada sequência exclusiva.
Lembre-se de considerar coisas como cultura e outras coisas ao construir seu dicionário, para lidar com duplicatas com letras acentuadas corretamente.
fonte
O seguinte trecho de código tenta remover duplicatas de um ArrayList, embora essa não seja uma solução ideal. Fiz a pergunta durante uma entrevista para remover duplicatas por meio de recursão e sem usar um segundo / temp arraylist:
fonte
Solução simples:
fonte
Talvez o hashset que não armazena elementos duplicados e ignora silenciosamente os pedidos para adicionar duplicados.
fonte
NOTA: NÃO testado!
Pode fazer o que você precisa ...
EDIT Argh !!! espancado por rob por menos de um minuto!
fonte
Testado abaixo e funciona. O legal é que ele também faz uma pesquisa sensível à cultura
}
--AptSenSDET
fonte
Esse código 100% remove valores duplicados de uma matriz [como usei um [i]] ..... Você pode convertê-lo em qualquer idioma OO ..... :)
fonte
Método de extensão genérica:
fonte
você pode usar este código quando trabalhar com um ArrayList
fonte
fonte
Abaixo está uma lógica simples em java: você percorre os elementos da matriz duas vezes e, se vir algum elemento, atribui zero a ela e não toca no índice do elemento que está comparando.
fonte
fonte
fonte
Kkk Não tenho certeza se isso é bruxaria ou apenas código bonito
1 strINvalues .Split (','). Distinct (). ToArray ()
2 string.Join (",", XXX);
1 Dividindo a matriz e usando Distinct [LINQ] para remover duplicatas 2 Juntando-a novamente sem as duplicatas.
Desculpe, eu nunca li o texto no StackOverFlow apenas o código. faz mais sentido do que o texto;)
fonte
fonte
A melhor maneira? Difícil dizer, a abordagem HashSet parece rápida, mas (dependendo dos dados) usando um algoritmo de classificação (CountSort?) Pode ser muito mais rápido.
Quase ramo livre. Quão? Modo de depuração, Step Into (F11) com uma pequena matriz: {1,3,1,1,0}
Uma solução com dois loops aninhados pode levar algum tempo, especialmente para matrizes maiores.
fonte