Go에서 sort.Strings()를 사용한 대소문자 구분 없는 정렬
Go에서는 대소문자에 포함된 문자열 목록을 정렬하는 것이 가능합니다. - 사용자 정의 비교 함수와 함께 sort.Strings() 함수를 사용하는 둔감한 방식. 이 사용자 정의 함수는 문자열을 소문자로 변환한 결과를 사용하여 문자열을 비교합니다.
예:
<code class="go">data := []string{"A", "b", "D", "c"} sort.Strings(data) // Default case-sensitive sorting fmt.Println(data) // Output: [A b c D]</code>
대소문자를 구분하지 않는 정렬을 달성하기 위해 사용자 정의를 정의할 수 있습니다. 함수는 다음과 같습니다.
<code class="go">sort.Slice(data, func(i, j int) bool { return strings.ToLower(data[i]) < strings.ToLower(data[j]) })</code>
이 함수는 두 문자열을 비교하기 전에 소문자로 변환하여 대소문자를 구분하지 않고 정렬합니다.
업데이트된 코드 실행:
<code class="go">data := []string{"A", "b", "D", "c"} sort.Slice(data, func(i, j int) bool { return strings.ToLower(data[i]) < strings.ToLower(data[j]) }) fmt.Println(data) // Output: [A b c D]</code>
대안:
위 접근 방식은 효과적이지만 비교 중에 문자열 할당이 포함될 수 있습니다. 할당을 피하기 위한 또 다른 접근 방식은 각 룬을 소문자로 변환하면서 문자열을 룬별로 비교하는 것입니다.
<code class="go">func lessLower(sa, sb string) bool { for { rb, nb := utf8.DecodeRuneInString(sb) if nb == 0 { return false } ra, na := utf8.DecodeRuneInString(sa) if na == 0 { return true } rb = unicode.ToLower(rb) ra = unicode.ToLower(ra) if ra != rb { return ra < rb } sa = sa[na:] sb = sb[nb:] } }</code>
그런 다음 이 lessLower 함수를 사용하여 문자열을 대소문자를 구분하지 않고 정렬할 수 있습니다.
<code class="go">sort.Slice(data, func(i, j int) bool { return lessLower(data[i], data[j]) })</code>
언어 또는 문화별 정렬 순서의 경우 collate 패키지 사용을 고려해 보세요.
위 내용은 Go에서 `sort.Strings()` 함수를 사용하여 대소문자를 구분하지 않고 문자열을 정렬하려면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!