【问题标题】:Is there a way to unique a map[string]interface{} for golang?有没有办法为 golang 唯一的 map[string]interface{}?
【发布时间】:2014-01-28 07:49:53
【问题描述】:

就像array_unique php 函数:

$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);

输出:

Array
(
    [a] => green
    [0] => red
    [1] => blue
)

谢谢!

【问题讨论】:

    标签: map go


    【解决方案1】:

    没有内置的方法可以做到这一点,所以你需要自己制作一个函数。

    如果你想做一个通用函数,你必须使用reflect。如果您有特定的地图类型,那么您可以更轻松地制作它:

    package main
    
    import (
        "fmt"
    )
    
    func Unique(m map[string]string) map[string]string {
        n := make(map[string]string, len(m))
        ref := make(map[string]bool, len(m))
        for k, v := range m {
            if _, ok := ref[v]; !ok {
                ref[v] = true
                n[k] = v
            }
        }
    
        return n
    }
    
    func main() {
        input := map[string]string{"a": "green", "0": "red", "b": "green", "1": "blue", "2": "red"}
        unique := Unique(input)
        fmt.Println(unique)
    }
    

    可能的输出

    地图[a:green 0:red 1:blue]

    Playground

    注意

    由于地图不保持秩序,你无法知道哪些键会被剥离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 2016-02-27
      • 2021-01-02
      • 2018-10-08
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多