Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!
Select your favorite languages :
  • Or search :

Idiom #297 Sort a list of strings, case-insensitively

Sort the string list data in a case-insensitive manner.

The sorting must not destroy the original casing of the strings.

data.sort((a, b) => a.toUpperCase().compareTo(b.toUpperCase()));
import (
	"sort"
	"strings"
)
sort.Slice(data, func(i, j int) bool {
	return strings.ToLower(data[i]) < strings.ToLower(data[j])
})
import (
	"sort"
	"unicode"
	"unicode/utf8"
)
func lessCaseInsensitive(s, t string) bool {
	for {
		if len(t) == 0 {
			return false
		}
		if len(s) == 0 {
			return true
		}
		c, sizec := utf8.DecodeRuneInString(s)
		d, sized := utf8.DecodeRuneInString(t)

		lowerc := unicode.ToLower(c)
		lowerd := unicode.ToLower(d)

		if lowerc < lowerd {
			return true
		}
		if lowerc > lowerd {
			return false
		}

		s = s[sizec:]
		t = t[sized:]
	}
}

sort.Slice(data, func(i, j int) bool { return lessCaseInsensitive(data[i], data[j]) })
Classes;
data.sort;
@data = sort { lc($a) cmp lc($b) } @data;
data.sort(key=str.lower)
data.sort_by(&:downcase)

New implementation...