2

最初の列にキーがあり、次の列に値があるExcelスプレッドシートを、キーをフィールド名として、値を値として構造体に読み込もうとしています。私は次のコードを思いついたが、それはあまりマットな感じではない-O(n)ではなくO(1)時間でこれを行う方法があるはずだと思う。

[num,txt,~]=xlsread('whatever.xls','Rate');
txt=cell2mat(txt);
for i = 1:size(txt)
    rates.(txt(i,:))=num(i,:)
end

これについてより適切な方法は何ですか?私はOctaveしか持っていない自宅で働いているので、importdataはソリューションの領域から外れています。

4

1 に答える 1

0

このような場合、「struct」コマンドを使用して、さまざまなフィールド名と値を持つ構造体を作成できます。通常、最も難しいのはセル入力を正しい順序で取得することです...幸いなことに、xlsread は必要なものを (ほぼ) 提供します。今のところ、Excel ファイルは次のようになっていると想定しています。

フィールド1 フィールド2 フィールド3
1 2 3

その場合は、次のようになります。

[~,~,raw] = xlsread('C:\...\xlsx');
myStruct = struct(raw{:}); 

動作します。これがセル配列拡張の魔法です。「struct」のヘルプと「cell」のヘルプを見てください。これも良いです:

http://blogs.mathworks.com/loren/2009/10/21/dealing-with-cells/

最後の注意として、Brian L は上記で正しいです。MATLAB のワンライナーはクールに見えるかもしれませんが、対応する for ループよりも高速であることが "保証" されているわけではありません。

コードを読んでいる人は 99% の確率で上記の例を理解できないことを考えると、for ループの例は問題ありません。

于 2012-10-23T01:12:38.777 に答える