登录
首页 >  Golang >  Go问答

如何在 golang 切片中搜索元素

来源:Golang技术栈

时间:2023-03-21 10:06:09 136浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《如何在 golang 切片中搜索元素》,本文主要会讲到golang等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我有一片结构。

type Config struct {
    Key string
    Value string
}

// I form a slice of the above struct
var myconfig []Config 

// unmarshal a response body into the above slice
if err := json.Unmarshal(respbody, &myconfig); err != nil {
    panic(err)
}

fmt.Println(config)

这是这个的输出:

[{key1 test} {web/key1 test2}]

如何搜索此数组以获取元素 where key="key1"

正确答案

用一个简单的for循环:

for _, v := range myconfig {
    if v.Key == "key1" {
        // Found!
    }
}

请注意,由于切片的元素类型是 a struct(不是指针),如果结构类型为“大”,这可能效率低下,因为循环会将每个访问的元素复制到循环变量中。

range仅在索引上使用循环会更快,这可以避免复制元素:

for i := range myconfig {
    if myconfig[i].Key == "key1" {
        // Found!
    }
}

笔记:

这取决于您的情况是否可能存在多个相同的配置key,但如果没有,如果找到匹配项,您应该break退出循环(以避免搜索其他配置)。

for i := range myconfig {
    if myconfig[i].Key == "key1" {
        // Found!
        break
    }
}

map此外,如果这是一个频繁的操作,你应该考虑从中构建一个你可以简单地索引的,例如

// Build a config map:
confMap := map[string]string{}
for _, v := range myconfig {
    confMap[v.Key] = v.Value
}

// And then to find values by key:
if v, ok := confMap["key1"]; ok {
    // Found
}

本篇关于《如何在 golang 切片中搜索元素》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>