val data
= Seq
("file9b",
"file456b",
"file1c")
def translate
(s
: String
) = { val it
= "([^\\d]*)(\\d+)([^\\d]*)".
r.
findAllIn(s
) it.matchData.flatMap(m =>
(1 to 3).map {i =>
if (i
== 2) part.
toInt else part
}).toSeq
}
def listOrdering
[T
: Ordering
]: Ordering
[Seq
[T
]] = new Ordering
[Seq
[T
]] { def compare
(x
: Seq
[T
], y
: Seq
[T
]) = x.
view.
zip(y
).
map(p
=> implicitly
[Ordering
[T
]].
compare(p.
_1, p.
_2
)) .find(_ != 0).getOrElse(x.size.compareTo(y.size))
}
val ordering
= Ordering.
fromLessThan[Any
] { case (a
: Int, b
: Int
) => a
< b
case (a, b
) => a.
toString < b.
toString }
println(data.sorted)
println(data.sortBy(translate)(listOrdering(ordering)))
/*
import scalaz._
import Scalaz._
import Order._
new OrderLow{
println(data.sorted(OrderOrdering(orderBy(translate)(IterableOrder(ScalaOrderingOrder(ordering))))))
}
*/
}
b2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewogIHZhbCBkYXRhID0gU2VxKCJmaWxlOWIiLCAiZmlsZTQ1NmIiLCAiZmlsZTFjIikKCiAgZGVmIHRyYW5zbGF0ZShzOiBTdHJpbmcpID0gewogICAgdmFsIGl0ID0gIihbXlxcZF0qKShcXGQrKShbXlxcZF0qKSIuci5maW5kQWxsSW4ocykKICAgIGl0Lm1hdGNoRGF0YS5mbGF0TWFwKG0gPT4KICAgICAgKDEgdG8gMykubWFwIHtpID0+CiAgICAgICAgdmFsIHBhcnQgPSB0cnkgbS5ncm91cChpKSBjYXRjaCB7Y2FzZSBlID0+ICIifQogICAgICAgIGlmIChpID09IDIpIHBhcnQudG9JbnQgZWxzZSBwYXJ0CiAgICAgIH0pLnRvU2VxCiAgfQoKICBkZWYgbGlzdE9yZGVyaW5nW1Q6IE9yZGVyaW5nXTogT3JkZXJpbmdbU2VxW1RdXSA9IG5ldyBPcmRlcmluZ1tTZXFbVF1dIHsKICAgIGRlZiBjb21wYXJlKHg6IFNlcVtUXSwgeTogU2VxW1RdKSA9IHgudmlldy56aXAoeSkubWFwKHAgPT4gaW1wbGljaXRseVtPcmRlcmluZ1tUXV0uY29tcGFyZShwLl8xLCBwLl8yKSkKICAgICAgICAuZmluZChfICE9IDApLmdldE9yRWxzZSh4LnNpemUuY29tcGFyZVRvKHkuc2l6ZSkpCiAgfQoKICB2YWwgb3JkZXJpbmcgPSBPcmRlcmluZy5mcm9tTGVzc1RoYW5bQW55XSB7CiAgICBjYXNlIChhOiBJbnQsIGI6IEludCkgPT4gYSA8IGIKICAgIGNhc2UgKGEsIGIpID0+IGEudG9TdHJpbmcgPCBiLnRvU3RyaW5nCiAgfQogIHByaW50bG4oZGF0YS5zb3J0ZWQpCiAgcHJpbnRsbihkYXRhLnNvcnRCeSh0cmFuc2xhdGUpKGxpc3RPcmRlcmluZyhvcmRlcmluZykpKQovKiAgCiAgaW1wb3J0IHNjYWxhei5fCiAgaW1wb3J0IFNjYWxhei5fCiAgaW1wb3J0IE9yZGVyLl8KICBuZXcgT3JkZXJMb3d7CiAgICBwcmludGxuKGRhdGEuc29ydGVkKE9yZGVyT3JkZXJpbmcob3JkZXJCeSh0cmFuc2xhdGUpKEl0ZXJhYmxlT3JkZXIoU2NhbGFPcmRlcmluZ09yZGVyKG9yZGVyaW5nKSkpKSkpCiAgfQogKi8KfQo=