Como posso classificar a lista genérica DESC e ASC? Com LINQ e sem LINQ? Estou usando o VS2008.
class Program
{
static void Main(string[] args)
{
List<int> li = new List<int>();
li.Add(456);
li.Add(123);
li.Add(12345667);
li.Add(0);
li.Add(1);
li.Sort();
foreach (int item in li)
{
Console.WriteLine(item.ToString() + "\n");
}
Console.ReadKey();
}
}
li.Sort((a, b) => b.CompareTo(a));
que a-1*
abordagem usada aqui. Editei a resposta de acordo, mas @Servy a reverteu.-a.CompareTo(b)
.Sem Linq:
Ascendente:
Descendente:
fonte
Sort()
é um método vazio, então você não pode encadear oReverse()
a ele dessa maneira. Você precisará de 2 operações separadas. No entanto, com o LINQ, você pode encadear a um,OrderBy
mas nesse ponto você deve apenas usarOrderByDescending
.sem linq, use
Sort()
e entãoReverse()
.fonte
Eu estava verificando todas as respostas acima e gostaria de acrescentar mais uma informação adicional. Eu queria classificar a lista na ordem DESC e estava procurando a solução que é mais rápida para entradas maiores e estava usando este método anteriormente: -
mas meus casos de teste estavam falhando por exceder os limites de tempo, então a solução abaixo funcionou para mim: -
Portanto, em última análise, a conclusão é que a segunda forma de classificação de lista em ordem decrescente é um pouco mais rápida do que a anterior.
fonte
Maneira muito simples de classificar a lista com valores int em ordem decrescente:
Espero que isso ajude!
fonte
int.CompareTo(int)
significa uma razão. Consulte a fonte em reference.microsoft.com que diz: "É necessário usar comparar porque a subtração mudará para positivo para números neg muito grandes, etc. ". Se você tiverb = int.MinValue
ea = 1
(digamos), isso irá falhar. Às vezes, uma chamada de método vale a pena.