How do I remove the empty cells from a vector of cells?

461 ビュー (過去 30 日間)
Ned Gulley
Ned Gulley 2011 年 1 月 20 日
編集済み: Jan 2017 年 3 月 12 日
I have a vector of cells which contain strings. Some of the cells in the vector are empty. I want to remove the empty cells from the vector.
Suppose I start with
strs = {'one','','two','three','','','four',''};
and I want to end with
strs = {'one','two','three','four'};
  2 件のコメント
Jan
Jan 2017 年 3 月 12 日
@Rajiv: This is a completely different question. Please do not high-jack this thread, but open a new one. Thanks.

サインインしてコメントする。

採用された回答

Hy
Hy 2011 年 1 月 20 日
The built-in function strcmp can compare a character array to a cell array of strings. Matching cells may be removed by setting them equal to the empty array.
strs(strcmp('',strs)) = [];

その他の回答 (4 件)

Matt Fig
Matt Fig 2011 年 1 月 20 日
Probably the fastest approach:
strs = strs(~cellfun('isempty',strs)) % Call Built-in string
  2 件のコメント
Jan
Jan 2011 年 2 月 1 日
This method is the most efficient solution.

サインインしてコメントする。


Ned Gulley
Ned Gulley 2011 年 1 月 20 日
Here's one way to do it.
strs = {'one','','two','three','','','four',''};
empties = find(cellfun(@isempty,strs)); % identify the empty cells
strs(empties) = [] % remove the empty cells
This gives
strs =
'one' 'two' 'three' 'four'
  1 件のコメント
Jan
Jan 2011 年 2 月 1 日
CELLFUN(@isempty) is remarkably slower than CELLFUN('isempty') as suggested by Matt Fig.

サインインしてコメントする。


Michael Katz
Michael Katz 2011 年 1 月 20 日
I wanted to do:
strs = setdiff(strs,{''})
but turns out it reorders the output:
strs =
'four' 'one' 'three' 'two'
So, I wound up with this:
[~,ix] = setdiff(strs,{''})
strs = strs(sort(ix))

Bryan White
Bryan White 2011 年 2 月 1 日
For variety:
cellstr(strvcat(strs))'

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by