Игнорировать регистр при сортировке
Пишу прогу для сортировки строк по типу sort в unix. Нужно игнорировать регистр не меняя изначальные строки(ToLower/ToUpper не подходит). Нужно чтобы было "text"="TEXT" и при сортировки строк например
some
text
one
some
TEXT
На выходе получилось
one
some
some
text
TEXT
Я додумался толлько через ToLower игнорировать регистр но это как я и сказал не подходит
package main
import (
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"sort"
"strings"
)
var (
rotate bool
setColumn int
byNum bool
repeated bool
byMonth bool
trimLastSpace bool
checkSorted bool
path string
)
func home() string {
home, err := os.UserHomeDir()
if err != nil {
log.Fatal(err)
}
return home + "/"
}
func flags() {
flag.BoolVar(&rotate, "r", false, "rotate sorting")
flag.BoolVar(&trimLastSpace, "b", false, "ignore last spaces")
flag.BoolVar(&repeated, "u", false, "show repeated strings")
flag.BoolVar(&checkSorted, "c", false, "check sorted string or not")
flag.BoolVar(&byMonth, "M", false, "sort by months")
flag.BoolVar(&byNum, "n", false, "sort by numbers")
flag.IntVar(&setColumn, "k", 0, "set target column to sort it")
flag.StringVar(&path, "f", home(), "set path to target file")
flag.Parse()
}
func init() {
flags()
}
func getUnsortedContent() string {
content, err := ioutil.ReadFile(path)
if err != nil {
log.Fatal(err)
}
return string(content)
}
func FieldsStrs(str string) []string {
return strings.Fields(str)
}
func tolower() []string {
content := getUnsortedContent()
strs := FieldsStrs(content)
lenstr := len(strs)
for i := 0; i < lenstr; i++ {
strs[i] = strings.ToLower(strs[i])
}
return strs
}
func sorting() []string {
fields := tolower()
sort.Slice(fields, func(i, j int) bool {
return fields[i] < fields[j]
})
return fields
}
func main() {
fmt.Println(sorting())
}
Как игнорировать регистр без изменения изнчальных строк?
Может вместо sort.Slice(...) использовать что-то другое что будет игнорить регистр?