Sorting 在Dart中进行升序和降序排序?

Sorting 在Dart中进行升序和降序排序?,sorting,dart,Sorting,Dart,我有这个 var-nlist=[4,2,1,5]; var比较=(a,b)=>a.compareTo(b); nlist.sort(比较); 打印(nlist);//[1,2,4,5] 在这里(我把(b,a)改为(a,b)) var nlist=[4,2,1,5] var比较=(b,a)=>a.compareTo(b); nlist.sort(比较); 打印(nlist);//[5,4,2,1] 为什么这个小小的修改会从升序变为降序呢?很有意思的是,您对更改后发生的事情的实际预期 比较返回值

我有这个

var-nlist=[4,2,1,5];
var比较=(a,b)=>a.compareTo(b);
nlist.sort(比较);
打印(nlist);//[1,2,4,5]
在这里(我把
(b,a)
改为
(a,b)

var nlist=[4,2,1,5]
var比较=(b,a)=>a.compareTo(b);
nlist.sort(比较);
打印(nlist);//[5,4,2,1]

为什么这个小小的修改会从升序变为降序呢?

很有意思的是,您对更改后发生的事情的实际预期

比较返回值
+1
0
-1
,具体取决于第二个参数是否大于第一个参数,或者如果它们相等,则比较返回值
0
。当您交换两个参数时,
+1
变为
-1
,反之亦然,这将导致降序而不是升序

1.与(2)相比
返回
-1

print(nlist.sort((a,b)=>a.compareTo(b));
按升序打印列表元素,因此是的,默认为升序。

另一种排序方式

  var nlist = [4,2,1,5];
  var ascending = nlist..sort();
  var descending = ascending.reversed;
  print(ascending);  // [1, 2, 4, 5]
  print(descending);  // [5, 4, 2, 1]
对于升序:

var nlist = [4,2,1,5]
var compare = (b, a) => a.compareTo(b);
对于降序:

var compare = (b, a) => -a.compareTo(b);
为了提升 下降
谢谢@Günter Zöchbauer。那么,它遵循的“默认”顺序是什么,+1还是-1?我的意思是,在(a,b)的情况下,如果它返回1,那么我知道a>b,那么它将把a放在b之前,或者把b放在a之前,默认顺序是
(a,b)=>a.compareTo(b)
。这是如果不提供比较函数进行排序时得到的顺序-默认情况下,按此顺序使用元素自己的
compareTo
函数。这是类型本身的默认顺序,即数字的数字顺序和字符串的字典顺序。如果需要对不可比较的元素进行排序,则不能使用
compareTo
,并且必须编写一个函数,如果第一个元素小于第二个元素,则返回负数;如果相反,则返回正数;如果元素相等,则返回零。
nlist..sort()看起来像一个打字错误吗。。是Dart中的级联运算符,请参见
cascade
操作非常有用,它允许将排序后的数组存储到变量中。无级联
排序
返回
无效
简单解决方案。这是一个完美的答案@答案是颠倒的。第一个将以降序给出值,第二个将以升序给出值。
var nlist = [1, 6, 8, 2, 16, 0]
nlist.sort((a, b) => a.compareTo(b));
var nlist = [1, 6, 8, 2, 16, 0]
nlist.sort((b, a) => a.compareTo(b));