【问题标题】:Using Cell Array Contents to Create Struct Entries使用元胞数组内容创建结构条目
【发布时间】:2024-04-26 21:20:02
【问题描述】:

假设我有两个包含字符串值的元胞数组 A 和 B。我希望填充一个结构 S,以便生成S.valueinA.valueinB = 1 的所有可能组合。我目前正在尝试使用两个嵌套的 for 循环来完成此任务,这些循环遍历每个可能的组合,并想问是否有更有效的方法可以在 MATLAB 中解决这个问题。

【问题讨论】:

    标签: matlab structure cell-array


    【解决方案1】:

    如果您想在结构中创建动态字段名称,我看不出如果没有两个 for 循环,您还能怎么做。假设我们有两个由字符串条目组成的元胞数组AB。 对于我的例子,提前为这些数组中的字符串道歉,因为我现在想不出更好的东西!

    这是你想要达到的目标吗?

    S = struct();
    A = {'hello', 'my', 'name', 'is', 'ray'};
    B = {'i', 'am', 'doing', 'awesome'};
    for idx = 1 : numel(A)
        for idx2 = 1 : numel(B)
            S.(A{idx}).(B{idx2}) = 1;
        end
    end
    

    这将创建一个嵌套结构S,这样对于A 中的每个元素,这将成为S 中的一个字段,其中该字段是另一个 结构,其中包含名称来自所有B 中的元素。

    如果我们显示S,我们会得到:

    >> S
    
    S = 
    
        hello: [1x1 struct]
           my: [1x1 struct]
         name: [1x1 struct]
           is: [1x1 struct]
          ray: [1x1 struct]
    

    如果我们访问Shello 字段,我们会得到:

    >> S.hello
    
    ans = 
    
              i: 1
             am: 1
          doing: 1
        awesome: 1
    

    同样,如果我们访问my 字段,我们会得到:

    >> S.my
    
    ans = 
    
              i: 1
             am: 1
          doing: 1
        awesome: 1
    

    因此,如果我们想要获得hello 字段后跟am 字段,我们这样做:

    >> S.hello.am
    
    ans =
    
         1
    

    【讨论】:

    • @nkjt - 哈哈。非常感谢您。那条评论让我早上好。
    • @rayryeng 感谢您的回答!这实际上是我想要实现的;我试图研究 matlab 是否有更有效的方法(因为这可能需要花费数千个条目的时间)。
    • @mCode - 啊,我明白了。是的,当涉及到动态字段名称时,如果没有for 循环,我看不出你怎么能做到这一点。但是,如果嵌套字段仅包含一个数字,那么我认为它应该相对较快。我还没有测试它,但这是我的预感。顺便说一句,不客气!