6

次のようにネストされたセル配列を作成したいと思います。

tag = {'slot1'}
info = {' name' 'number' 'IDnum'}
x = {tag , info}

x(tag(1))そして、呼び出して表示できるようにしたい'slot1'。代わりに、次のエラーが発生します。

??? Error using ==> subsindex
Function 'subsindex' is not defined for values of class 'cell'.

x(1)MATLAB ディスプレイを呼び出すと、 {1x1 cell}. リストの最初のセルにアクセスできるようにしてx、別の文字列と文字列を比較できるようにしたいと考えています。

MATLAB の組み込みクラスが機能しない場合、これを行う独自のクラスを作成できることはわかっていますが、この問題を解決する簡単な方法はありますか?

4

2 に答える 2

12

の戻り値は、x(1)実際には、文字列を含む別の1行1列のセル配列を含む1行1列のセル配列です'slot1'。セル配列のコンテンツ(セルのサブ配列だけでなく)にアクセスするには、括弧(つまり「セルインデックス」)の代わりに中括弧(つまり「コンテンツインデックス」 )を使用する必要があります。

たとえば、文字列の比較を行うために'slot1'から文字列を取得する場合xは、次の2つの方法のいずれかで行うことができます。

cstr = x{1};    %# Will return a 1-by-1 cell array containing 'slot1'
str = x{1}{1};  %# Will return the string 'slot1'

次に、関数STRCMPを上記のいずれかで使用できます。

isTheSame = strcmp(cstr,'slot1');  %# Returns true
isTheSame = strcmp(str,'slot1');   %# Also returns true

上記は、MATLABの文字列のセル配列が、多くの組み込み関数の文字列および文字配列とある程度互換的に処理されるために機能します。

于 2010-06-21T16:57:44.613 に答える
4

cell 配列を使用する代わりに、構造体を使用できます。

x(1) = struct('tag','slot1','info',{{'something'}}); %# using '1' in case there are many

次に、最初のタグを次のように取得します

x(1).tag

または、タグ名をフィールド名として使用できます。タグ名と情報が cell 配列の場合、'slot1' と 'information here' の代わりに cell 配列を渡すことができ、一度に構造体を作成できます。

x = struct('slot1','information here')
tagName = 'slot1';
%# access the information via tag names
x.(tagName)
于 2010-06-21T17:09:19.260 に答える