>  기사  >  백엔드 개발  >  Go에서 `sort.Strings()` 함수를 사용하여 대소문자를 구분하지 않고 문자열을 정렬하려면 어떻게 해야 하나요?

Go에서 `sort.Strings()` 함수를 사용하여 대소문자를 구분하지 않고 문자열을 정렬하려면 어떻게 해야 하나요?

DDD
DDD원래의
2024-10-28 02:24:01131검색

How can I perform case-insensitive sorting of strings in Go using the `sort.Strings()` function?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.