2016-01-25 11 views
3

我已經創建了一個名爲Items的單元陣列,其大小爲(10,5)。它包含以下的單元陣列中的第一列:在MATLAB中將單元格陣列的所有維數從最小到最大值排序

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

我把它全部填滿了,但我需要做的是根據€總價從最小單元陣列進行排序最大的,但我似乎無法找到辦法做到這一點。我嘗試sort(Items,5);爲了根據歐元值進行排序,但它返回一個錯誤。找到一種自動排序的方法會很有用,所以如果我想添加更多的項目,它仍然會將它們排序在全局列表中。

+0

是您的單元格數組只是一個矩陣,頂部行是標題,其餘是數字?無論哪種方式,看看'sortrows'函數 – MZimmerman6

+0

在第一列中我有項目名稱(字符串)。 –

回答

3

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 

如果改變文件格式,是不是一種選擇,你總是可以只轉換爲數字成字符串,然後顯示。這會變得更復雜一點,但一個快速的谷歌會幫助你。

編輯#3

我不知道這之前就已經存在,但你能明顯使用名爲bank格式style。這將顯示所有數字作爲兩個小數點,即使它們是0.

+0

你的方法工作得很好。順便說一下,你如何給列添加標題?有沒有特定的方式來做到這一點,或者只是單元格的第一行? –

+0

@MartaSampietro使用'table'類或將一行字符串作爲單元格數組的第一列。 – rayryeng

+0

@MartaSampietro rayryeng的建議正是你想要做的。但是,如果這樣做,如果向單元數組添加頂行,sortrow函數將不起作用,因爲它假定整列是相同的數據類型。 – MZimmerman6

2

首先將所有的價格放在一個單獨的數組中,單獨對這個數組進行排序,然後使用排序索引重新排列單元格數組的行。

嘗試這樣:

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

或者您可以使用sortrows功能MZimmerman6提到,沿着你的電池陣列的第五列運行。我不知道它在單元陣列上工作,所以我學到了一些新東西!

+1

很高興能教你一些新的東西:)我剛剛在幾個月前瞭解到它。儘管替代方案只有一兩行,但簡潔性幾乎總是好的。 – MZimmerman6

+0

@ MZimmerman6我不知道它在單元陣列上工作,這就是爲什麼我沒有考慮使用它的原因。謝謝你的訣竅! – rayryeng

+1

沒問題,它甚至可以在桌面上工作,顯然,只需在文檔中閱讀即可。 – MZimmerman6

相關問題