如何从元胞数组中删除一个元素?

How can I drop one element from a cell array?

我有一些一维元胞数组,如下所示:

foo={'', 'some', 'important', '', 'data'}

我想去掉散布在元胞数组中的空字符串,如下所示:

{'some', 'important', 'data'}

我知道如何找到空字符串,但我能够找到的所有关于从元胞数组中删除元素的文档都会在要删除的位置留下一些东西。 如何从元胞数组中删除一个元素,并缩小生成的数组以便仅包含相关数据?

您可以使用 strcmp(foo,'') 识别空字符串。要从元胞数组中删除第一个元素,请使用 foo(1)=[]。相比之下,foo{1}=[] 将空列表分配给第一个元素。两者结合就是解决方案:

>> foo(strcmp(foo,''))=[]

foo = 

    'some'    'important'    'data'

就像@Daniel 提到的,您可以使用strcmp 来识别空字符串。作为删除空字符串(即 foo(is_empty_str)=[];)的替代方法,您可以 select 非空字符串:

is_empty_str = strcmp(foo,'');
foo = foo(~is_empty_str);

两种方法产生相同的结果。有些人可能更喜欢其中一种,主要是编码风格问题。