2015-09-29 63 views
1

是否可以將空單元格移動到2D單元格陣列中的末尾?例如。如果單元格(2,2)是[],則單元格(3,2)將進入(2,2)的位置,(4,2)進入(3,2)等位置,而空值將被添加到例如最後一行。在2D單元陣列中移動空單元格

here

+2

單元陣列仍具有爲「矩形」,這樣就可以很容易地刪除和整個行或列,但不能刪除一個單元格。你只是想將所有的空單元格移動到它們各自行的末尾? – Dan

+0

但是你的單元格結構會發生變化,最後必須將它填零,最好將[]移動到單元結構的最後一行/列而不是刪除它們 – GameOfThrows

+0

你是對的!我編輯的帖子:) – Cobe

回答

4
C = {1 []; [] 4; 'aa' []}; %// example cell array 
e = cellfun('isempty', C); %// this indicates for each cell if it's empty or not 
[~, r] = sort(e, 1); %// sorting of each col to move empty cells to the end 
[m, n] = size(C); 
C = C(bsxfun(@plus, r, (0:m:m*(n-1)))); %// apply sorting to each col, using linear indexing 

在這個例子中,C最初

C = 
    [ 1]  [] 
     [] [4] 
    'aa'  [] 

,併成爲

C = 
    [ 1] [4] 
    'aa'  [] 
     []  [] 

一些言論:

  • 這是可行的,因爲sort穩定:它保留原來的順序,以防萬一。請注意,e只包含零和1。
  • Linear indexingbsxfun有效地完成。 (repmatsub2ind可以替代地使用。)
+0

偉大的答案!非常高效,以及 – GameOfThrows

+0

@GameOfThrows謝謝! –

+0

:太棒了!那正是我想要的!非常感謝! :) – Cobe