根据元胞数组中的内容查找列索引
Finding the column index given the contents in a cell array
我正在尝试找出在给定 2 行元胞数组中的 2 行值时如何获取列索引。
我不知道为什么我很难弄清楚这一点,因为您可以很容易地找到 1 列值。
例如,给出下面的元胞数组:
{1,1,1,2,2,2;'apple','banana','orange','apple','banana','orange'}.'
我想找到第 1 列 = 2
和第 2 列 = 'banana'
的位置
输出应该是 5。
我该怎么做?
根据@LuisMendo
,我将假设一个元胞数组
cellarray = {1,1,1,2,2,2;'apple','banana','orange','apple','banana','orange'}.';
values = cell2mat(cellarray(:,1));
tmp1 = values == 1;
tmp2 = strcmp('banana', cellarray(:,2));
tmp3 = tmp1+tmp2;
result = find(tmp3 == 2);
这将从元胞数组中获取值,然后搜索等于 1
的所有值。然后它使用 strcmp
查找所有与 'banana'
匹配的项,并将该结果添加到按值获得的逻辑数组中。最后它搜索两个实例都为真的地方,即 tmp3
等于 2
.
哇哦!我第一次打高尔夫球。 59、51字节!
find(((([A{:,1}])==1)'+strcmp('banana',A(:,2)))==2)
=
2
如果您喜欢 code-golfing
-
find([A{1,:}]==2 & ismember(A(2,:),'banana'))
样本运行-
>> A
A =
[ 1] [ 1] [ 1] [ 2] [ 2] [ 2]
'apple' 'banana' 'orange' 'apple' 'banana' 'orange'
>> find([A{1,:}]==2 & ismember(A(2,:),'banana'))
ans =
5
我正在尝试找出在给定 2 行元胞数组中的 2 行值时如何获取列索引。
我不知道为什么我很难弄清楚这一点,因为您可以很容易地找到 1 列值。
例如,给出下面的元胞数组:
{1,1,1,2,2,2;'apple','banana','orange','apple','banana','orange'}.'
我想找到第 1 列 = 2
和第 2 列 = 'banana'
输出应该是 5。
我该怎么做?
根据@LuisMendo
,我将假设一个元胞数组cellarray = {1,1,1,2,2,2;'apple','banana','orange','apple','banana','orange'}.';
values = cell2mat(cellarray(:,1));
tmp1 = values == 1;
tmp2 = strcmp('banana', cellarray(:,2));
tmp3 = tmp1+tmp2;
result = find(tmp3 == 2);
这将从元胞数组中获取值,然后搜索等于 1
的所有值。然后它使用 strcmp
查找所有与 'banana'
匹配的项,并将该结果添加到按值获得的逻辑数组中。最后它搜索两个实例都为真的地方,即 tmp3
等于 2
.
哇哦!我第一次打高尔夫球。 59、51字节!
find(((([A{:,1}])==1)'+strcmp('banana',A(:,2)))==2)
=
2
如果您喜欢 code-golfing
-
find([A{1,:}]==2 & ismember(A(2,:),'banana'))
样本运行-
>> A
A =
[ 1] [ 1] [ 1] [ 2] [ 2] [ 2]
'apple' 'banana' 'orange' 'apple' 'banana' 'orange'
>> find([A{1,:}]==2 & ismember(A(2,:),'banana'))
ans =
5