在kotlin中有没有一种方法可以通过二进制比较器对列表进行排序?

在kotlin中有没有一种方法可以通过二进制比较器对列表进行排序?,kotlin,Kotlin,我想用lambda二进制比较器根据它们的比率对列表进行排序,以避免精度错误,但到目前为止,我只知道sortBy或sortWith函数,该函数只接受一个对象进行排序。在C++中,我会写: std::sort(v.begin(),v.end(),[](std::对a,std::对b){ 返回a.first*b.seconda.first*b.second-a.second*b.first} 函数的不同之处在于,它必须根据顺序返回一个整数(-1,0,1),而不仅仅是一个布尔值。请查看函数sorted

我想用lambda二进制比较器根据它们的比率对
列表进行排序,以避免精度错误,但到目前为止,我只知道
sortBy
sortWith
函数,该函数只接受一个对象进行排序。在C++中,我会写:

std::sort(v.begin(),v.end(),[](std::对a,std::对b){
返回a.first*b.second

有等效的kotlin代码吗?谢谢。

sortedWith
功能实际上需要一个
比较器,因此您可以传递一个lambda(由于SAM转换),并且您可以实际处理两个对象:

list.sorted与{a,b->a.first*b.second-a.second*b.first}

函数的不同之处在于,它必须根据顺序返回一个整数(-1,0,1),而不仅仅是一个布尔值。请查看函数
sortedWith
实际上需要一个
比较器,因此您可以传递一个lambda(由于SAM转换),并且您可以实际处理两个对象:

list.sorted与{a,b->a.first*b.second-a.second*b.first}
函数的不同之处在于,它必须根据顺序返回一个整数(-1,0,1),而不仅仅是一个布尔值

pairList.sorted与{a,b->
当(a.first*b.second。。。
假->。。。
}
}
这非常接近:

pairList.sorted与{a,b->
当(a.first*b.second。。。
假->。。。
}
}

你的C++代码正在对一对集合进行排序。如果你在Kotlin有一对对,那么你可以做同样的事情。但是,用当前的状态,很难知道它的类型和里面的值,所以很难回答这个问题。你的C++代码正在整理一对对的集合。如果你有一个在Kotlin中收集对,然后你可以做同样的事情。但是,根据问题的当前状态,很难知道集合的类型和其中的值,因此很难回答这个问题。为什么我可以直接传入lambda?在Kotlin中,如果函数的最后一个参数是lambda,那么它可以传递到paren之外这些是语法糖。请参阅。但是函数将比较器作为其最后一个参数。我想知道lambda是否用于直接初始化比较器对象?lambda用作
比较器
,您可以按此处所述传递它。这称为SAM转换,您可以查找它;)哦,谢谢。或者我不知道如何查找它。为什么我可以直接传入lambda?在Kotlin中,如果函数的最后一个参数是lambda,那么它可以作为语法传递到括号外。请参阅。但是该函数将比较器作为其最后一个参数。我想知道lambda是否用于直接初始化Comparator对象?lambda用作
比较器
,您可以按此处所述传递它。这称为SAM转换,您可以查找;)哦,谢谢。否则我就不知道如何查找它了。为什么
when
阻塞?其中包含什么?lambda实现并应返回该契约中的指定值。lambda应返回
{-1,0,1}
中的值,以满足
比较器
API的要求。
when
表达式是可以根据需要转换
x
值的地方为什么
when
块?其中包含什么?lambda实现并应返回该契约中的指定值。lambda应返回
{-1,0,1}
中的值,以满足
比较器
API的要求。
when
表达式用于根据需要转换
x