首頁 >後端開發 >Golang >如何在 Go 切片或陣列中找到唯一元素?

如何在 Go 切片或陣列中找到唯一元素?

Susan Sarandon
Susan Sarandon原創
2024-11-02 11:02:30422瀏覽

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

在Go 切片或陣列中尋找唯一項目

在Go 中處理資料時,可能需要只擷取唯一元素來自切片或陣列。雖然 Python 為此提供了方便的構造(例如集合),但 Go 本身並沒有提供類似的內建功能。

考慮問題中提供的範例程式碼,其目的是從清單中尋找唯一座標包含重複項。該程式碼嘗試透過迭代原始列表(已訪問)和最初為空的唯一列表,使用反射將存取中的每個元素與唯一的所有元素進行比較來實現此目的。

程式碼分析與錯誤

但是,程式碼包含幾個問題:

  • 使用反射元素比較的(reflect.DeepEqual() ) 是不必要的,並且引入了額外的複雜性。
  • 內循環盲目追加元素,而不考慮它們是否已經存在於 unique 中,導致同一元素的多次添加。

改良的解決方案

以下簡化且更有效率的解決方案所需的邏輯如下所示:

<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 的map[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