scala中的匿名比较器函数具有解构的元组?

the*_*ian 0 scala

我有一个元组列表,我想根据元组中的第二个元素进行升序排序.我用这段代码做到了:

freqs.sortWith( _._2 < _._2 )
Run Code Online (Sandbox Code Playgroud)

但我不喜欢._2命名,因为我更喜欢第二个参数的名字freqs.sortWith( _.weight < _.weight ).任何想法如何做到这一点?

And*_*kin 5

你不需要重复两次sortWith,你可以使用sortBy(_._2).

如果您想拥有一个好名字,请创建一个case具有此名称成员变量的自定义类:

case class Foo(whatever: String, weight: Double)

val list: List[Foo] = ???
list.sortBy(_.weight)
Run Code Online (Sandbox Code Playgroud)

它只需一行.


或者,您可以在本地"pimp"元组:

class WeightOps(val whatever: String, val weight: Double)
implicit def tupleToWeightOps(t: (String, Double)): WeightOps = 
  new WeightOps(t._1, t._2)
Run Code Online (Sandbox Code Playgroud)

然后你可以.weight直接使用元组:

val list: List[(String, Double)] = ???
list.sortBy(_.weight)
Run Code Online (Sandbox Code Playgroud)

不要忘记保持隐含范围尽可能小.