在Go 切片或陣列中尋找唯一項目
在Go 中處理資料時,可能需要只擷取唯一元素來自切片或陣列。雖然 Python 為此提供了方便的構造(例如集合),但 Go 本身並沒有提供類似的內建功能。
考慮問題中提供的範例程式碼,其目的是從清單中尋找唯一座標包含重複項。該程式碼嘗試透過迭代原始列表(已訪問)和最初為空的唯一列表,使用反射將存取中的每個元素與唯一的所有元素進行比較來實現此目的。
程式碼分析與錯誤
但是,程式碼包含幾個問題:
改進方案
下面介紹了一個遵循所需邏輯的簡化且更有效率的解決方案:
<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中文網其他相關文章!