table2struct(struct2table(s)) does not return s when some fields are cell arrays with a single element
Mostrar comentarios más antiguos
My actual goal is to sort a struct array by multiple fields. I have working code that looks roughly like this:
% We use stable sort calls in reverse priority order
[~, i_field3] = sort({my_struct.field3});
my_struct = my_struct(i_field3);
[~, i_field2] = sort([my_struct.field2]);
my_struct = my_struct(i_field2);
[~, i_field1] = sort([my_struct.field1]);
my_struct = my_struct(i_field1); % This is highest priority
T = struct2table(my_struct);
sortedT = sortrows(T, {'field1', 'field2', 'field3'});
my_struct = table2struct(sortedT);
However, the particular struct array I'm sorting has fields that are cell arrays, but often with a single element. Unfortunately, the new code doesn't preserve the cell array, and returns that single element only. A short way to reproduce/illustrate the problem would be this:
good_example = struct('field1', {{'abc', 'def'}}) % field1: {'abc' 'def'}
good_T = struct2table(good_example)
good_struct = table2struct(good_T) % field1: {'abc' 'def'}
bad_example = struct('field1', {{'abc'}}) % field1: {'abc'}
bad_T = struct2table(bad_example)
bad_struct = table2struct(bad_T) % field1: 'abc'
I want bad_struct to be identical to bad_example just like how good_struct is identical to good_example.
Obviously I could check for this situation and correct things, but that negates any readability/maintainability from using tables to do the sort.
Is there a way to guarantee that table2struct(struct2table(my_struct)) returns an identical struct array? Alternatively, is there a way to sort struct arrays that is better than my original code?
Respuesta aceptada
Más respuestas (0)
Categorías
Más información sobre Structures en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!