Search a cell array of structs

I have a large one-dimensional cell array of structs. All the structs have the same format (i.e. same fields in the same order). I would like to search for a particular value in a struct field. E.g. say one of the fields is 'name'. I would like to be able to search the cell array and get back indices of all cells which contain a struct where the 'name' field contains 'sally'. Is there a straight-forward way to do this?

 採用された回答

per isakson
per isakson 2014 年 6 月 24 日
編集済み: per isakson 2014 年 6 月 24 日

1 投票

Try
cac{1} = struct( 'name', 'val1' );
cac{2} = struct( 'name', 'val2' );
cac{3} = struct( 'name', 'val3' );
cac{4} = struct( 'name', 'sally' );
strcmp( cellfun( @(sas) sas.name, cac, 'uni', false ), {'sally'} )
which returns
ans =
0 0 0 1
Straight-forward - maybe not.

5 件のコメント

Ben
Ben 2014 年 6 月 28 日
Could you elaborate a bit on this? I haven't looked into cellfun at all. Is 'sas' the name of the function? What is cac?
per isakson
per isakson 2014 年 6 月 28 日
There is a good description together with examples in the documentation: cellfun, Apply function to each cell in cell array
cac and sas are names of variables.
Ben
Ben 2014 年 6 月 28 日
編集済み: Ben 2014 年 6 月 28 日
I've looked at that, and still don't understand 'uni'. Is that a valid shortening of 'UniformOutput'? Also, where do I find out about the function handle 'sas'?
per isakson
per isakson 2014 年 6 月 29 日
Yes, 'uni' is a valid shortening of 'UniformOutput'
@(sas) sas.name is the definition of a anonymous function and sas is just an argument.
Ben
Ben 2014 年 7 月 1 日
I've run across a problem using this idea. It works fine in the if statement, but throws an error in the loop. I put a break at line 8, and if I hover over "restaurants", Matlab knows it's a cell array of structs, just like "reviews" is. Any ideas on why I'm getting this error?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeStructures についてさらに検索

質問済み:

Ben
2014 年 6 月 24 日

コメント済み:

Ben
2014 年 7 月 1 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by