在 MATLAB 中从最小到最大对元胞数组的所有维度进行排序

Sort all dimensions of a cell array from min to max in MATLAB

我创建了一个名为 Items 的元胞数组,大小为 (10,5)。它包含以下内容作为元胞数组中的第一列:

Item name    Price (in $)    Shipping (in $)    Total price (in $)    Total price (in €)

我已经填满了,但我需要做的是根据以欧元为单位的总价从小到大对元胞数组进行排序,但我似乎找不到办法它。我尝试 sort(Items,5); 以便根据 € 中的值进行排序,但它 returns 是一个错误。找到一种使排序自动进行的方法可能很有用,因此如果我想添加更多项目,它仍会在全局列表中对它们进行排序。

首先将所有价格放在一个单独的数组中,单独对该数组进行排序,然后使用排序索引重新排列元胞数组的行。

尝试这样的事情:

price = [Items{:,5}];
[~,ind] = sort(price);
ItemsSorted = Items(ind,:);

或者,您可以使用 MZimmerman6 提到的 sortrows 函数并沿元胞数组的第五列进行操作。我不知道它适用于元胞阵列,所以我学到了一些新东西!

sortrows 很可能会做你想做的事。假设数据类型在整个列中保持不变,它将根据特定列进行排序。

>> a ={'a',8,9;'b',5,6;'c',2,3};
>> a_sorted = sortrows(a,3)

a_sortred = 

'c'    [2]    [3]
'b'    [5]    [6]
'a'    [8]    [9]

编辑

根据您在下面的评论,您可以轻松地先对数组进行排序,然后像合并常规数组一样向元胞数组添加一行。 Documentation

>> a = {7,8,9;4,5,6;1,2,3};
>> a_sorted = sortrows(a,3);
>> headers = {'col1','col2','col3'};
>> a_header = [headers;a_sorted]

a_header = 

    'col1'    'col2'    'col3'
    [   1]    [   2]    [   3]
    [   4]    [   5]    [   6]
    [   7]    [   8]    [   9]

编辑#2

您可以使用 round 函数的第二个参数对您提供的值进行四舍五入。舍入后,您可以更改显示方式的格式。一般设置为short,即小数点后4位。如果将其设置为 shortg,它将显示尽可能少的小数位,最多 4 位。

>> a = [1.23456789;2.3456789;3.456789]

a =

    1.2346
    2.3457
    3.4568

>> a_rounded = round(a,2)

a_rounded =

    1.2300
    2.3500
    3.4600

>> format shortg
>> a_rounded

a_rounded =

         1.23
         2.35
         3.46

如果无法更改格式,您始终可以将数字转换为字符串然后显示它。这变得有点复杂,但快速 google 会帮助你。

编辑#3

我以前不知道这个存在,但您显然可以使用名为 bank 的格式 style。这会将所有数字显示为两位小数,即使它们是 0。