美文网首页V语言
V语言学习笔记-07字典

V语言学习笔记-07字典

作者: lydiandy | 来源:发表于2020-05-19 16:07 被阅读0次

    除了内置的基本类型外,数组和字典也是内置类型

    map实现

    从map的源代码定义看,map是通过2个struct实现的

    vlib/builtin/map.v

    struct map {
        root &mapnode //字典第一个键值对的地址
        element_size int //一个键值对元素占用的内存大小
    pub:
        size int //字典的大小,也就是键值对的数量,这是map唯一可以对外直接访问的属性,只读
    }
    struct mapnode {  //键值对节点
        left &mapnode 
        right &mapnode
        is_empty bool
        key string //键,目前只能是string类型
        value voidptr //值的地址,值可以是任何类型
    }
    

    map定义

    fn main() {
        mut m := map[string]int
        m['one'] = 1
        m['two'] = 2
        println(m['one']) //返回对应的value
        println(m['bad_key']) // 如果指定key不存在,返回0
    }
    

    目前map的key只能是string类型

    map[string]int
    map[string]User
    map[string][]int
    ...
    

    map字面量初始化

    m:={'ont':1,'two':2,'three':3}
    

    map.size返回字典的大小

    fn main() {
        mut m := map[string]int
        m['one'] = 1
        m['two'] = 2
        println(m.size) //返回2
    }
    

    in操作符

    判断某一个元素是否包含在map的key中

    fn main() {
        mut m := map[string]int
        m['one'] = 1
        m['two'] = 2
        println('one' in m) //返回true
        println('three' in m) //返回false
    }
    

    遍历map

    fn main() {
        mut m := map[string]int
        m['one'] = 1
        m['two'] = 2
        m['three'] = 3
        
        for key,value in m {
            println('key:$key,value:$value')
        }
        for key,_ in m {
            println('key:$key')
        }
        for _,value in m {
                println('value:$value')
            }
    
    }
    

    字典相关的源代码可以参考v源代码中的:vlib/builtin/map.v

    更多字典相关的函数,参考标准库章节

    相关文章

      网友评论

        本文标题:V语言学习笔记-07字典

        本文链接:https://www.haomeiwen.com/subject/vsmbohtx.html