Elixir - Map

Elixir中的Map是一种键值对数据结构,允许任何值作为键,且键不排序。本文介绍了Map的使用,包括键值匹配、更新、删除等操作,以及Map模块的API,如`Map.delete()`, `Map.fetch!()`等,帮助开发者更好地理解和运用Map。" 79158130,6679593,iOS DES解密问题及解决方案,"['iOS开发', '加密算法', 'DES']
摘要由CSDN通过智能技术生成

Maps

maps 是elixir中的一个基础的数据结构,存储格式为key-value(键-值)对,语法为 %{}
map的两个特点:

  • Maps 允许任何值做 key
  • Maps 的 key 不能排序
  • Maps 的语法格式
    当map的key是一个atom时,可以采用key: value的写法,获取时也可以使用map.key的方式获取
    注意⚠️:采用map[:key]获取不存在的值,返回的时nil,采用map.key获取不存在的值,返回的是keyError
    iex(1)> map = %{
         :a => 1, 2 => :b}
    %{
         2 => :b, :a => 1}
    iex(2)> map[:a]
    1
    iex(3)> map[2]
    :b
    iex(4)> map[:b]
    nil
    iex(5)>
    
  • Map 模式匹配
    iex(5)> %{
         :a => a} = %{
         :a => 1, 2 => :b}
    %{
         2 => :b, :a => 1}
    iex(6)> a
    1
    iex(7)>
    
  • 更新Map的值
    iex(14)> map = %{
         :a => 1, 2 => :b}
    %{
         2 => :b, :a => 1}
    iex(15)> %{
         map | 2 => "two"}
    %{
         2 => "two", :a => 1}
    iex(16)> %{
         map | :c => "two"}
    ** (KeyError) key :c not found in: %{
         2 => :b, :a => 1}
        (stdlib 4.0.1) :maps.update(:c, "two", %{
         2 => :b, :a => 1})
        (stdlib 4.0.1) erl_eval.erl:309: anonymous fn/2 in :erl_eval.expr/6
        (stdlib 4.0.1) lists.erl:1350: :lists.foldl/3
    iex(16)>
    
    注意⚠️:若更新的key,在map中不存在,则会报KeyError。
  • Map module API
    iex(32)> map1 = %{
         2 => :a, "hello" => 3, "c" => 3, a: 1, b: 2}
    %{
         2 => :a, :a => 1, :b => 2, "c" => 3, "hello" => 3}
    iex(33)> map2 = %{
         x: 1, y: 2}
    %{
         x: 1, y: 2}
    
    • Map.delete(map, key): 从指定的map中,删除指定的key, 如果key不存在,不会有任何改变

      map1 = %{
             2 => :a, "hello" => 3, "c" => 3, a: 1, b: 2}
      %{
             2 => :a, :a => 1, :b => 2, "c" => 3, "hello" => 3}
      iex(34)> Map.delete(map1, 2)
      %{
             :a => 1, :b => 2, "c" => 3, "hello" => 3}
      iex(35)
      
    • Map.drop(map, keys): 从指定的map中删除指定的一组keys

      iex(35)> map1          
      %{
             2 => :a, :a => 1, :b => 2, "c" => 3, "hello" => 3}
      iex(36)> Map.drop(map1, ["c", 2])
      %{
             :a => 1, :b => 2, "hello" => 3}
      iex(37)>
      
    • Map.equal?(map1, map2): 比较2个map是否完全相同;此函数没有太大意义。在使用过程中,要完成此功能,一般使用 ==/2===/2

      iex(39)> map1
      %{
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值