Shapeless 당신을 위해이 작업을 수행 할 것입니다.
import shapeless._
import shapeless.syntax.std.product._
case class Fnord(a: Int, b: String)
List(Fnord(1, "z - last"), Fnord(1, "a - first")).sortBy(_.productElements.tupled)
는
res0: List[Fnord] = List(Fnord(1,a - first), Fnord(1,z - last))
productElements는 볼품 HList에 케이스 클래스를 전환 가져옵니다 :
scala> Fnord(1, "z - last").productElements
res1: Int :: String :: shapeless.HNil = 1 :: z - last :: HNil
그리고 HLists이 #tupled와 튜플로 변환됩니다
scala> Fnord(1, "z - last").productElements.tupled
res2: (Int, String) = (1,z - last)
성능 horri 일 가능성이있다 당신이 끊임없이 개종하고 있기 때문에. 당신은 아마도 모든 것을 변환 된 형태로 변환하고, 정렬 한 다음 과 같은 것을 사용하여 다시 변환 할 것입니다.
팁을 주셔서 감사합니다. REPL 2.9.0-1에서()을 (를) 제거해야했습니다. "얻으십시오" – Tanjona
매우 멋지다! 나는 적용 할 수 없다는 것에 대해 전혀 몰랐다. –
멋지다. 당신의 제안으로 나는 나의 케이스 클래스를 얻을 수 있었다. 이렇게 주문했다 :'val thisTuple : Ordered [(String, Int)] = Foo.unapply (this) .get; val thatTuple = Foo.unapply (그) .get; thisTuple은 thatTuple'을 비교합니다. 세계에서 가장 예쁜 것은 아니기 때문에 제안은 여전히 열려 있지만 답변은 확실합니다. 감사! – Douglas