>  기사  >  백엔드 개발  >  Go 슬라이스 또는 배열에서 고유한 요소를 찾는 방법은 무엇입니까?

Go 슬라이스 또는 배열에서 고유한 요소를 찾는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-02 11:02:30356검색

How to Find Unique Elements in a Go Slice or Array?

Go 슬라이스 또는 배열에서 고유한 항목 찾기

Go에서 데이터를 처리할 때 고유한 요소만 추출해야 할 수 있습니다. 슬라이스 또는 배열에서. Python은 이러한 목적을 위해 집합과 같은 편리한 구성을 제공하지만 Go는 기본적으로 유사한 내장 기능을 제공하지 않습니다.

목록에서 고유한 좌표를 찾는 것이 목적인 질문에 제공된 샘플 코드를 고려해보세요. 중복된 내용이 포함되어 있습니다. 코드는 원래 목록(방문)과 처음에 비어 있는 고유 목록을 모두 반복하고 리플렉션을 사용하여 방문한 각 요소를 고유한 모든 요소와 비교하여 이를 달성하려고 합니다.

코드 분석 및 오류

그러나 코드에는 다음과 같은 몇 가지 문제가 있습니다.

  • 요소 비교를 위해 리플렉션(reflect.DeepEqual())을 사용하는 것은 불필요하며 추가적인 복잡성 계층이 발생합니다.
  • 내부 루프는 요소가 이미 고유한 요소에 존재하는지 고려하지 않고 맹목적으로 요소를 추가하므로 동일한 요소가 여러 번 추가됩니다.

향상된 솔루션

원하는 논리를 따르는 단순화되고 보다 효율적인 솔루션이 아래에 제시되어 있습니다.

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
var unique []visit

for _, v := range visited {
    skip := false
    for _, u := range unique {
        if v == u {
            skip = true
            break
        }
    }
    if !skip {
        unique = append(unique, v)
    }
}

fmt.Println(unique)</code>

Map을 사용한 대체 솔루션

또는 Go의 지도를 활용할 수도 있습니다[visit] bool을 사용하여 집합과 같은 구조를 만들고 다음과 같이 고유 요소를 추출합니다.

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
unique := map[visit]bool{}

for _, v := range visited {
    unique[v] = true
}

fmt.Println(unique)</code>

맵 키는 고유 요소를 나타냅니다. 고유한 방문 값 조각을 얻으려면 추가 단계가 필요합니다.

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
var unique []visit

m := map[visit]bool{}

for _, v := range visited {
    if !m[v] {
        m[v] = true
        unique = append(unique, v)
    }
}

fmt.Println(unique)</code>

이러한 솔루션은 Go 슬라이스 또는 배열에서 고유한 요소를 효과적으로 찾아 문제 설명을 준수하고 구축 시 효율적인 대안을 제공합니다. 세트 기능이 부족합니다.

위 내용은 Go 슬라이스 또는 배열에서 고유한 요소를 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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