#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 это не поддерживает.