如何在元胞数组中查找特定元胞?

How do I find a specific cell within a cell array?

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

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

的单元格的索引

谢谢!

尝试 cellfun with isequal:

>> 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

我可以建议的另一种方法是分别对每一列进行操作。我们可以在每一列上使用逻辑运算符来搜索元胞数组中第一列包含特定数字,第二列包含特定花色的牌。为了表示匹配,我们将检查这两个输出相交的位置。完成后,我们可以通过将两个输出与逻辑 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 的帮助下完成的,从特定列中提取每个元素,我们用这些元素构造一个数组。