假設我有一個名稱列表。在Scala中擴展Seq.sortBy
case class Name(val first: String, val last: String)
val names = Name("c", "B") :: Name("b", "a") :: Name("a", "B") :: Nil
如果我現在想按姓氏對該列表進行排序(如果這還不夠,按名字排序),則很容易完成。
names.sortBy(n => (n.last, n.first))
// List[Name] = List(Name(a,B), Name(c,B), Name(b,a))
但是,如果我想基於字符串的其他排序規則來排序此列表?
不幸的是,下面不工作:
val o = new Ordering[String]{ def compare(x: String, y: String) = collator.compare(x, y) }
names.sortBy(n => (n.last, n.first))(o)
// error: type mismatch;
// found : java.lang.Object with Ordering[String]
// required: Ordering[(String, String)]
// names.sortBy(n => (n.last, n.first))(o)
是沒有什麼辦法,讓我改變順序,而無需編寫與多個明確sortWith
方法if
- 爲了應對所有else
分公司案件?
嗯,我不知道。與3^k相乘看起來很聰明,但如果不遵循-1/0/+ 1慣例,它當然不會起作用。此外,它會一次評估所有比較結果,而當發現差異時,Tuple比較將停止。 – Debilski 2011-02-18 16:57:49