, :
package main
import "sort"
import "fmt"
import "math"
type ByFirstDigit []int
func (s ByFirstDigit) Len() int {
return len(s)
}
func (s ByFirstDigit) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s ByFirstDigit) Less(i, j int) bool {
return firstDigit( s[i] ) < firstDigit( s[j] )
}
func firstDigit( x int ) int {
return int( math.Abs( float64( x ) ) / math.Pow( 10, float64( numDigits(x) - 1 ) ) )
}
func numDigits( x int ) int {
if ( x == 0 ) { return 1 }
return int( math.Floor( math.Log10( math.Abs( float64(x) ) ) ) ) + 1
}
func main() {
ints := []int{3, 20, 400, -500, 101}
sort.Sort( ByFirstDigit( ints ) )
fmt.Println( ints )
}
( ):
https://play.golang.org/p/uLyBMlra2N