>  기사  >  백엔드 개발  >  sort.Strings()를 사용하여 Go에서 대소문자를 구분하지 않는 정렬을 수행하는 방법은 무엇입니까?

sort.Strings()를 사용하여 Go에서 대소문자를 구분하지 않는 정렬을 수행하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 10:34:02124검색

How to Achieve Case-Insensitive Sorting in Go with sort.Strings()?

sort.Strings()를 사용하여 Golang에서 대소문자를 구분하지 않는 정렬

Python에서 대소문자를 구분하지 않는 정렬은 종종 다음의 키 매개변수를 사용하여 수행됩니다. 사용자 정의 비교 함수를 허용하는 sorted() 함수. 그러나 Go의 sort.Strings()에는 직접적으로 동등한 것이 없습니다.

Go에서 대소문자를 구분하지 않는 정렬을 수행하기 위해 Go의 강력한 슬라이싱 기능을 활용할 수 있습니다. 한 가지 접근 방식은 문자열의 소문자 버전을 비교하는 사용자 정의 비교 함수를 만드는 것입니다.

<code class="go">sort.Strings(data, func(i, j int) bool {
    return strings.ToLower(data[i]) < strings.ToLower(data[j])
})</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:]
    }
}

sort.Strings(data, func(i, j int) bool {
    return lessLower(data[i], data[j])
})</code>

이 방법은 문자열의 룬을 직접 비교하여 불필요한 할당을 방지합니다.

유연성을 높이고 언어별 정렬을 수행하려면 로케일 및 언어별 정렬 규칙을 제공하는 collate 패키지 사용을 고려해 보세요.

위 내용은 sort.Strings()를 사용하여 Go에서 대소문자를 구분하지 않는 정렬을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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