Sorting Kotlin中的比较器换算 val list=listOf(7,3,5,9,1,3) 列表.用(比较器{a,b-> 什么时候{ a>b->1 a-1 其他->0 } })
答案-[1,3,3,5,7,9] 上面的代码在Kotlin中对给定的列表进行排序。有人能解释一下这个比较器是如何工作并进行排序的吗?我很难理解这个列表是如何排序的。提前感谢,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标准库都非常好,所以这是一个很好的开始。) 有些对象具有“自然顺序”;例如,
简短回答:
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
}
})