Допустим, у меня есть массив ячеек, содержащий ячейки 1x2. например. deck = {{4,'c'},{6,'s'}...{13,'c'}...{6,'d'}}
Как я могу найти индекс конкретной ячейки? Например, я хочу найти индекс ячейки со значениями {13,'c'}
.
Спасибо!
Допустим, у меня есть массив ячеек, содержащий ячейки 1x2. например. deck = {{4,'c'},{6,'s'}...{13,'c'}...{6,'d'}}
Как я могу найти индекс конкретной ячейки? Например, я хочу найти индекс ячейки со значениями {13,'c'}
.
Спасибо!
Другой способ, который я могу предложить, — работать с каждым столбцом отдельно. Мы могли бы использовать логические операторы в каждом столбце для поиска карт в вашем массиве ячеек, которые содержат определенное число в первом столбце, за которым следует определенная масть во втором столбце. Чтобы обозначить совпадение, мы должны проверить, где пересекаются эти два выхода. Мы можем сделать это, объединив оба вывода с логическим 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
для извлечения каждого элемента из определенного столбец, и мы строим массив из этих элементов.
>> 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
!
- person rayryeng; 03.01.2015