Put in alphabet order a structure only by one field

21 ビュー (過去 30 日間)
José Pereira
José Pereira 2017 年 12 月 7 日
コメント済み: Walter Roberson 2017 年 12 月 18 日
Hi, i have a struct called "users" that contains fields such as "name","username","password".I want do display all the structure's data but it has to be alphabettically organized by name. How can i do this using sort?
  1 件のコメント
Stephen23
Stephen23 2017 年 12 月 18 日
編集済み: Stephen23 2017 年 12 月 18 日
@José Pereira: which of these do you have:
  1. a non-scalar structure with scalar fields (or char vectors), or
  2. a scalar structure with non-scalar fields?

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

回答 (2 件)

Walter Roberson
Walter Roberson 2017 年 12 月 18 日
[~, sortidx] = sort({users.name});
users = users(sortidx);
  3 件のコメント
Stephen23
Stephen23 2017 年 12 月 18 日
Assumes a non-scalar structure... which the question does not specify.
Walter Roberson
Walter Roberson 2017 年 12 月 18 日
True. If it is a scalar structure with cell arrays of character vectors, and will all fields having the same number of entries (but fields possibly being different data types from each other)
[~, sortidx] = sort(users.name);
users = structfun(@(F) F(sortidx), users, 'uniform', 0);

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


Harish Ramachandran
Harish Ramachandran 2017 年 12 月 18 日
編集済み: Harish Ramachandran 2017 年 12 月 18 日
Hello,
Unfortunately, there is no direct way to sort a structure according to one of the field. The steps below involve transforming the structure into a table, perform the ' sortrows' operation and reverting back to a structure. I have also attached a couple of relevant links which you can check out.
  • Create a predefined structure - users
users = struct('name', {'Noah', 'Liam', 'Mason', 'Jacob', 'William', 'Ethan', 'James', 'Alexander'},...
'username', {'NH', 'LM', 'MN', 'JB', 'WM', 'EN', 'JS', 'AR'},...
'password', {'NH147', 'LM258', 'MN@234', 'JB369', 'WM1991', 'EN4567', 'JS#345', 'AR/*-789'})
  • Convert the structure into a table.
user_Table = struct2table(users);
  • You can view the contents of the table using the ' disp' function:
disp(user_Table)
  • Sort the table with the key being the 'name' column.
user_Table = sortrows(user_Table,'name');
  • Revert back to a structure
users = table2struct(user_Table);
You can also check out the links below:
  1. sortrows - Sort rows of matrix or table
  2. Advantages of using Tables
  3. Related question in MATLAB Answers repository
  4. File Exchange Blog - Sorting Structure Arrays based on Fields
  5. Printing the contents of a structure onto the command window

カテゴリ

Help Center および File ExchangeShifting and Sorting Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by