Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Kotlin中的比较器换算 val list=listOf(7,3,5,9,1,3) 列表.用(比较器{a,b-> 什么时候{ a>b->1 a-1 其他->0 } })_Sorting_Pointers_Kotlin_Data Structures_Collections - Fatal编程技术网

Sorting Kotlin中的比较器换算 val list=listOf(7,3,5,9,1,3) 列表.用(比较器{a,b-> 什么时候{ a>b->1 a-1 其他->0 } })

Sorting Kotlin中的比较器换算 val list=listOf(7,3,5,9,1,3) 列表.用(比较器{a,b-> 什么时候{ a>b->1 a-1 其他->0 } }),sorting,pointers,kotlin,data-structures,collections,Sorting,Pointers,Kotlin,Data Structures,Collections,答案-[1,3,3,5,7,9] 上面的代码在Kotlin中对给定的列表进行排序。有人能解释一下这个比较器是如何工作并进行排序的吗?我很难理解这个列表是如何排序的。提前感谢, 简短回答:Comparator告诉排序&c方法如何比较两个对象,即它们应该是什么顺序。问题中的代码实际上不需要一个,因为Ints已经有了一个自然顺序。但它是非常好的代码,并说明了如何处理不需要的对象 这在文档for…(一般来说,文档对于所有Java标准库都非常好,所以这是一个很好的开始。) 有些对象具有“自然顺序”;例如,

答案-[1,3,3,5,7,9]

上面的代码在Kotlin中对给定的列表进行排序。有人能解释一下这个比较器是如何工作并进行排序的吗?我很难理解这个列表是如何排序的。提前感谢,


简短回答:
Comparator
告诉排序&c方法如何比较两个对象,即它们应该是什么顺序。问题中的代码实际上不需要一个,因为
Int
s已经有了一个自然顺序。但它是非常好的代码,并说明了如何处理不需要的对象

这在文档for…(一般来说,文档对于所有Java标准库都非常好,所以这是一个很好的开始。)

有些对象具有“自然顺序”;例如,数字(数字顺序)和字符串(字典顺序)有一个非常明显的顺序。在Java和Kotlin中,这是由实现接口的对象表示的。所有标准排序、排序和c函数都知道使用什么顺序

但是对于没有自然顺序的对象呢?在这种情况下,如果你想对它们进行排序或做任何涉及排序的事情,你必须解释使用什么顺序。你可以通过提供一个对象来实现
比较器

这有一个单一的方法
int compare(to1,to2)
:实现必须确定
o1
是否小于、大于或等于
o2
。如果
o1
o2
,则返回一个负数,如果
o1
=
o2
,则返回零,如果
o1
o2
,则为正数

这就是问题中的代码所做的

List.sortedWith()
方法使用比较器创建列表的已排序版本。它使用的排序算法将准确确定它所比较的对象,但例如,它可能首先比较列表中的前两项:7和3。它将使用
compare(7,3)
调用比较器,比较器将返回一个正数(在本例中为1),以指示列表中的7应位于3之后。然后,比较器将继续处理该列表并进行进一步比较,直到它能够按顺序生成一个列表

正如我所说,在这种情况下,不需要编写比较器,因为
Int
s已经有了一个自然的顺序!因此,您可以简单地使用
list.sorted()
(然后使用
Int
自己的
compareTo()
方法,其工作方式类似。)


但是使用自己的比较器没有什么害处,问题中的代码说明了如何使用比较器。

简短回答:
比较器告诉排序&c方法如何比较两个对象,即它们的顺序。问题中的代码实际上不需要一个,因为
Int
s已经有了一个自然的顺序。但是它是非常好的代码,并且说明了如何处理没有顺序的对象

这在文档for…(一般来说,文档对于所有Java标准库都非常好,所以这是一个很好的开始。)

有些对象具有“自然顺序”;例如,数字(数字顺序)和字符串(字典顺序)有一个非常明显的顺序。在Java和Kotlin中,这是由实现接口的对象表示的。所有标准排序、排序和c函数都知道使用什么顺序

但是对于没有自然顺序的对象呢?在这种情况下,如果你想对它们进行排序或做任何涉及排序的事情,你必须解释使用什么顺序。你可以通过提供一个对象来实现
比较器

这有一个单一的方法
int compare(to1,to2)
:实现必须确定
o1
是否小于、大于或等于
o2
。如果
o1
o2
,则返回一个负数,如果
o1
=
o2
,则返回零,如果
o1
o2
,则为正数

这就是问题中的代码所做的

List.sortedWith()
方法使用比较器创建列表的已排序版本。它使用的排序算法将准确确定它所比较的对象,但例如,它可能首先比较列表中的前两项:7和3。它将使用
compare(7,3)
调用比较器,比较器将返回一个正数(在本例中为1),以指示列表中的7应位于3之后。然后,比较器将继续处理该列表并进行进一步比较,直到它能够按顺序生成一个列表

正如我所说,在这种情况下,不需要编写比较器,因为
Int
s已经有了一个自然的顺序!因此,您可以简单地使用
list.sorted()
(然后使用
Int
自己的
compareTo()
方法,其工作方式类似。)

但是使用自己的比较器并没有坏处,问题中的代码展示了如何实现

val list = listOf(7,3,5,9,1,3)
list.sortedWith(Comparator<Int>{ a, b ->
    when {
        a > b -> 1
        a < b -> -1
        else -> 0
    }
})