Screw map, let me pass a comparator function into sort for interfaces.
package main
import "sort"
type RevIntSlice struct {
sort.IntSlice
}
func (arr RevIntSlice) Less(i, j int) bool {
return arr.IntSlice.Less(j, i)
}
func main() {
myList := RevIntSlice { sort.IntSlice {1, 2 , 3 } }
sort.Sort(myList)
for _, elem := range(myList.IntSlice) {
println(elem)
}
}
Note that if all you want to do is reverse the sort order, sort.Reverse is a better way than what I wrote here. This is just an example of the kinds of things you can do.But that's more work (and more boilerplate) than simply passing an anonymous comparator to the sort function.
myArray.sort(new Comparator<MyClass> ({
@Override
CompareTo(MyClass lhs, MyClass rhs) {
return rhs.compare(lhs);
}
}));
Is that really shorter? I don't think so.In any case, there is a more elegant solution in Go, which is simply:
sort.Sort(sort.Reverse(array))
You need to open your mind a little bit, to learn a new language.Nope. Clojure and Haskell. Clojure:
user=> (sort > (vals {:foo 5, :bar 2, :baz 10}))
(10 5 2)
Haskell: >>> sortBy (flip compare) . map snd $ [("foo", 5), ("bar", 2), ("baz", 10)]
[10,5,2]