>백엔드 개발 >Golang >Go에서 두 문자열 조각의 차이점을 어떻게 효율적으로 찾을 수 있나요?

Go에서 두 문자열 조각의 차이점을 어떻게 효율적으로 찾을 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-09 05:27:13397검색

How Can I Efficiently Find the Difference Between Two String Slices in Go?

문자열 슬라이스 하위 집합 간의 구별 찾기

한 문자열 슬라이스 하위 집합을 다른 문자열 슬라이스 하위 집합과 구별하는 요소를 확인하려면 다음을 고려하세요. 문제:

<p>Here is my desired outcome</p>

<pre class="brush:php;toolbar:false">slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}

difference(slice1, slice2)
=> ["hello"]

I need to determine the disparities between these two string slice sections!

해결책

이 문제를 해결하기 위한 효율적인 접근 방식은 Go 맵이 대략 ~O(1) 복잡도에서 작동한다고 가정합니다. 결과적으로 제안된 차이 함수는 ~O(n)의 대략적인 복잡도로 정렬되지 않은 슬라이스에서 작동합니다.

// difference returns the elements in `a` that aren't in `b`.
func difference(a, b []string) []string {
    mb := make(map[string]struct{}, len(b))
    for _, x := range b {
        mb[x] = struct{}{}
    }
    var diff []string
    for _, x := range a {
        if _, found := mb[x]; !found {
            diff = append(diff, x)
        }
    }
    return diff
}

맵을 사용하여 요소 소속을 효율적으로 결정함으로써 차이 함수는 존재하는 요소를 효과적으로 식별하고 격리합니다. 한 조각에는 있지만 다른 조각에는 존재하지 않아 문자열 조각 하위 집합 간의 정확한 비교를 제공합니다.

위 내용은 Go에서 두 문자열 조각의 차이점을 어떻게 효율적으로 찾을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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