matlab — как мне отсортировать структуру по значениям?

#matlab #matlab-struct

#matlab #matlab-struct

Вопрос:

У меня есть эта структура:

 s = 

p_10_50_10_70: 0.1176
p_10_50_15_10: 0.9235
p_10_50_15_70: 0.2456
 p_10_50_base: 0.0100
p_10_70_15_10: 0.0895
p_10_70_15_70: 0.0053
 p_10_70_base: 6.3711e-06
p_15_10_15_70: 0.1892
 p_15_10_base: 0.0047
 p_15_70_base: 0.3377
 p_5_30_10_50: 0.0864
 p_5_30_10_70: 0.0014
 p_5_30_15_10: 0.0654
 p_5_30_15_70: 0.6165
  p_5_30_5_70: 0.0052
  p_5_30_8_30: 0.8106
  p_5_30_8_70: 0.0378
  p_5_30_base: 0.6113
 p_5_70_10_50: 0.2215
 p_5_70_10_70: 0.7448
 p_5_70_15_10: 0.2444
 p_5_70_15_70: 0.0221
  p_5_70_8_30: 0.0024
  p_5_70_8_70: 0.5382
  p_5_70_base: 2.1956e-04
 p_8_30_10_50: 0.0699
 p_8_30_10_70: 8.1918e-04
 p_8_30_15_10: 0.0599
 p_8_30_15_70: 0.7169
  p_8_30_8_70: 0.0218
  p_8_30_base: 0.9146
 p_8_70_10_50: 0.5467
 p_8_70_10_70: 0.3395
 p_8_70_15_10: 0.5552
 p_8_70_15_70: 0.0775
  p_8_70_base: 0.0015
 

`

Я хочу отсортировать ее по значениям, и я понимаю, что это может быть не лучший тип данных для такой сортировки. Я использую Matlab R2012b, у которого нет табличного типа данных, как я могу получить структуру данных, которая содержит как имена ключей, так и значения, упорядоченные по числовому значению?

В дальнейшем, какой наилучший тип данных для массива пар ключ-значение, такого как этот, если я хочу отсортировать по значению?

Спасибо!

Комментарии:

1. попробуйте nestedSortStruct Джейка Хьюи mathworks.com/matlabcentral/fileexchange/28573-nestedsortstruct

Ответ №1:

Похоже, это так:

 [~, idxs] = sort(cell2mat(struct2cell(s)));
s = orderfields(s, idxs);
 

Редактировать: Что касается вашего последнего вопроса, да, я не уверен, что есть отличные варианты. Единственное, что может быть лучше того, что у вас есть, — это класс с массивом ячеек строк и вектором соответствующих значений, а также функциями setter / getter для повышения эффективности доступа.

Комментарии:

1. спасибо, это потрясающе, о чем этот бит [~, idxs] = ?

2. @Ash О, это «современная» нотация Matlab для фиктивной переменной. Замените ~ на dummy или что-то еще, если ваша версия Matlab это не поддерживает.