比较不同格式的地图-elixir
我正在使用长生不老药中的地图 有些是比较不同格式的地图-elixir,elixir,Elixir,我正在使用长生不老药中的地图 有些是%{“foo”:“bar”}格式 还有一些在%{“foo”=>“bar”} 我有两张地图: a = %{"foo": "bar"} b = %{"foo" => "bar"} 我如何比较这两张地图 Map.equal?(a, b) 返回false您拥有的地图格式不同。他们有不同的钥匙 iex(1)> Map.equal? %{"foo": 4}, %{:"foo" => 4} true 使用第一个(“foo”:)只不过是编写第二个(:“
%{“foo”:“bar”}
格式
还有一些在%{“foo”=>“bar”}
我有两张地图:
a = %{"foo": "bar"}
b = %{"foo" => "bar"}
我如何比较这两张地图
Map.equal?(a, b)
返回
false
您拥有的地图格式不同。他们有不同的钥匙
iex(1)> Map.equal? %{"foo": 4}, %{:"foo" => 4}
true
使用第一个(“foo”:
)只不过是编写第二个(:“foo”=>
)的简写而已
当前的Map.equal?/2
函数用于确保键和值相同
在Elixir:“foo”
是一个原子,“foo”
是一个二进制文件(有时称为字符串)
这就是为什么Map.equal?/2
失败的原因,因为这两个值不相同
但是,如果您不关心类型的不同,而只关心类型的“内容”,则可以将所有键(可能还有值)转换为字符串,然后进行比较
for {key, value} <- my_map do
{inspect(key), inspect(value)}
end
对于{key,value}也许这一点:我认为值得强调的是,:foo==:“foo”
,引号用于处理一些非标准字符。是的。谢谢你,尼塔基。非标准字符的一个例子是空格。不能将带有空格的对象表示为不带引号的原子。
for {key, value} <- my_map do
{inspect(key), inspect(value)}
end