我有一个元组列表,我想根据元组中的第二个元素进行升序排序。我用这段代码做到了:
freqs.sortWith( _._2 < _._2 )
但是我不喜欢._2命名,因为我希望第二个参数有一个很好的名字,比如freqs.sortWith( _.weight < _.weight )
。
任何想法如何做到这一点?
答案 0 :(得分:5)
您不需要在sortWith
内重复所有内容,您可以使用sortBy(_._2)
代替。
如果您想拥有一个好名字,请创建一个具有此名称成员变量的自定义case
类:
case class Foo(whatever: String, weight: Double)
val list: List[Foo] = ???
list.sortBy(_.weight)
只需一行。
或者,你可以&#34;皮条客&#34;本地元组:
class WeightOps(val whatever: String, val weight: Double)
implicit def tupleToWeightOps(t: (String, Double)): WeightOps =
new WeightOps(t._1, t._2)
然后你可以直接在元组上使用.weight
:
val list: List[(String, Double)] = ???
list.sortBy(_.weight)
不要忘记保持隐含范围尽可能小。
答案 1 :(得分:3)
scala> val list: List[(String, Int)] = List (("foo", 7), ("bar", 3), ("foobar", 5))
list: List[(String, Int)] = List((foo,7), (bar,3), (foobar,5))
scala> list.sortBy {case (ignore, price) => price }
res70: List[(String, Int)] = List((bar,3), (foobar,5), (foo,7))
案例提取器可用于在变量上放置有意义的名称。