【问题标题】:How do I find a specific cell within a cell array?如何在元胞数组中找到特定的元胞?
【发布时间】:2015-03-01 01:08:59
【问题描述】:

假设我有一个包含 1x2 单元格的单元格数组。例如。 deck = {{4,'c'},{6,'s'}...{13,'c'}...{6,'d'}}

如何找到特定单元格的索引?例如,我想找到值为{13,'c'} 的单元格的索引。

谢谢!

【问题讨论】:

    标签: matlab indexing cell-array


    【解决方案1】:

    试试cellfunisequal

    >> deck = {{4,'c'},{6,'s'},{13,'c'},{6,'d'}};
    >> targetCell = {13,'c'};
    >> found = cellfun(@(c) isequal(c,targetCell),deck)
    found =
         0     0     1     0
    

    cellfun 让我们随心所欲地检查(不仅仅是isequal)。例如,如果要根据每个单元格中的字符串元素进行检查:

    >> targetLetter = 'c';
    >> found = cellfun(@(c) strcmp(c{2},targetLetter),deck)
    found =
         1     0     1     0
    

    【讨论】:

    • isequal 做得很好!
    【解决方案2】:

    我可以建议的另一种方法是分别对每一列进行操作。我们可以在每一列上使用逻辑运算符来搜索单元格数组中的卡片,这些卡片在第一列中包含特定数字,然后在第二列中包含特定花色。为了表示匹配,我们将检查这两个输出相交的位置。完成后,我们可以通过将两个输出与逻辑 AND 组合来做到这一点:

    deck = {{4,'c'},{6,'s'},{13,'c'},{6,'d'}};
    target_card = {13, 'c'};
    
    deck_unroll = vertcat(deck{:});    
    a1 = cat(1, deck_unroll{:,1}) == target_card{1};
    a2 = cat(1, deck_unroll{:,2}) == target_card{2};
    found = a1 & a2  
    
    found =
    
         0
         0
         1
         0
    

    因为deck 是一个嵌套元胞数组,我展开它使其成为一个二维元胞数组,其中每一行表示一张卡片。这存储在deck_unroll 中。完成此操作后,我会进一步展开单元格,以便将第一列放入数字数组中,然后搜索特定数字(在您的示例中为 13),然后将第二列放入字符串数组中,在其中搜索特定的字符(在您的示例中为'c')。这是在cat 的帮助下完成的,从特定列中提取每个元素,然后我们用这些元素构造一个数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-10
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多