Jak posortować listę ogólną DESC i ASC? Z LINQ i bez LINQ? Używam 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));
niż-1*
podejście zastosowane tutaj. Odpowiednio zredagowałem odpowiedź, ale @Servy ją cofnął.-a.CompareTo(b)
.Bez Linq:
Rosnąco:
Malejąco:
źródło
Sort()
jest metodą void, więc nie możesz połączyć zReverse()
nią w ten sposób. Będziesz potrzebować 2 oddzielnych operacji. Jednak w przypadku LINQ można połączyć go z plikiem,OrderBy
ale w tym momencie należy po prostu użyćOrderByDescending
.bez linq, użyj,
Sort()
a potemReverse()
to.źródło
Sprawdzałem wszystkie powyższe odpowiedzi i chciałem dodać jeszcze jedną dodatkową informację. Chciałem posortować listę w kolejności DESC i szukałem rozwiązania, które jest szybsze dla większych wejść i korzystałem wcześniej z tej metody: -
ale moje przypadki testowe zawodziły z powodu przekroczenia limitów czasowych, więc poniższe rozwiązanie działało dla mnie: -
Ostatecznie wniosek jest taki, że drugi sposób sortowania listy w porządku malejącym jest nieco szybszy niż poprzedni.
źródło
Bardzo prosty sposób sortowania listy z wartościami int w porządku malejącym:
Mam nadzieję, że to pomoże!
źródło
int.CompareTo(int)
jest powód do drzwi. Zobacz źródło na referenceource.microsoft.com, gdzie jest napisane: „Należy użyć porównania, ponieważ odejmowanie będzie zawierać wartości dodatnie w przypadku bardzo dużych liczb ujemnych itp .”. Jeśli maszb = int.MinValue
ia = 1
(powiedzmy), to się nie powiedzie. Czasami warto wywołać metodę.