【问题标题】:How to make a dictionary of arrays?如何制作数组字典?
【发布时间】:2015-08-05 02:18:22
【问题描述】:

我似乎无法弄清楚containers.Map 的工作原理。它可以处理字符和数字,但是当我尝试为其提供数组时会翻转。我该如何制作这样的东西?

function test
global a

a = containers.Map();
a(pi) = 3:14;
a(5) = 4:2:10;

end

【问题讨论】:

    标签: arrays matlab dictionary mapping containers


    【解决方案1】:

    问题是您使用containers.Map 类的默认构造函数。来自帮助:

    myMap = containers.Map() 创建一个空对象 myMap,它是一个
    MATLAB containers.Map 类的实例。 myMap 的属性
    是 Count(设置为 0)、KeyType(设置为 'char')和 ValueType(设置为
    '任何')。

    换句话说,你只能在这种形式中使用字符串作为键。如果要使用任意双精度值作为键,则需要在构造函数中指定'KeyType''ValueType'

    myMap = containers.Map('KeyType', kType, 'ValueType', vType) 构造
    一个没有数据的 Map 对象,它使用 kType 键类型和一个值
    vType 的类型。 kType 的有效值是字符串:'char',
    '双','单','int32','uint32','int64','uint64'。有效值
    vType 是字符串:'char', 'double', 'single', 'int8', 'uint8',
    “int16”、“uint16”、“int32”、“uint32”、“int64”、“uint64”、“逻辑”或
    '任何'。键类型和值类型参数的顺序不是
    重要,但必须同时提供。

    在你的例子中:

    a = containers.Map('KeyType','double','ValueType','any');
    a(pi) = 3:14;
    a(5) = 4:2:10;
    

    但是请注意,'double' 中的 'ValueType' 不适用于非标量值。或者,您可以通过构造函数直接使用cell arrays 指定您的键和值,并让它完成确定要使用的类型的工作:

    a = containers.Map({pi,5},{3:14 4:2:10});
    

    【讨论】:

    【解决方案2】:

    将数组、单元格甚至其他地图放入地图中没有问题。问题是您的关键领域。据我所知,地图使用字符串作为键。所以你当前的代码不起作用,但这会

    function test
        global a
    
        a = containers.Map();
        a('pi') = 3:14;
        a('5') = 4:2:10;
    
    end
    

    【讨论】:

    • containers.Map 可以使用 'char'、'double'、'single'、'int32'、'uint32'、'int64' 或 'uint64' 作为输入......所以一个数字 pi应该没问题......我认为这不是问题......我认为它可能试图从 a 中提取“pi”'th 元素,有点像 y(2) 会输出“2”,如果 y 是数组 y = 1 2. 但我不知道如何告诉它 a(pi) 是一个数组,而不是数组的元素
    猜你喜欢
    • 2014-12-14
    • 2019-12-17
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多