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

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

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

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

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

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

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

程式碼分析與錯誤

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

  • 使用反射(lect.DeepEqurefal())進行元素比較是不必要的,並且會帶來額外的複雜性。
  • 內循環盲目追加元素,不考慮元素是否已經存在於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[訪問] 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