MATLAB批量处理结构体数组方法

前言

当遇到结构体数组,而且需要对该结构体下相同字段的做一些批量操作时,一般的方法是进行for循环,但是这样看起来不太优雅。

批量操作结构体数组中特定的字段

下面介绍一种快捷实用的方法:
例如,现在有结构体 student

student(1).name = 'xiaomin';student(1).age = 1;
student(2).name = 'xiaozhang';student(2).age = 3;

现在需要将结构体中每个元素的age字段加1,一般的做法是for循环每一个元素,然后对结构体数组中的每个元素的特定字段进行一些操作。
现在结合deal命令和cellfun对结构体进行操作:

age = {
    
    };
[ age{
    
     1:length( student ) } ] = deal( student.age );
age = ( cellfun( @(x)x+1, age) );

将@(x)x+1替换为函数句柄funHandler,为对age元素操作的函数句柄

批量操作结构体数组符合特定条件的元素

例如,批量删除为结构体元素为空的那些元素:

a = struct('test',{
    
    1,[],[],3})
b = struct2cell(a);
a = cell2struct(b(~cellfun('isempty',b)),'test')

批量操作cell数组符合条件的元素

例如,删除cell数组中为空的元素:
ParameterOut 为cell型数组。

ParameterOut( cellfun( @isempty, ParameterOut ) ) = [  ];

辅助函数

cellfun 函数说明

用法: A = cellfun(func,C)
将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。然后 cellfun 将 func 的输出串联成输出数组 A,因此,对于 C 的第 i 个元素来说,A(i) = func(C{i})。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和元胞数组 C具有相同的大小。

arrayfun 函数说明

将函数应用于每个数组元素此 MATLAB 函数 将函数 func 应用于 A 的元素,一次一个元素。然后 arrayfun 将 func 的输出串联成输出数组 B,因此,对于 A 的第i 个元素来说,B(i) = func(A(i))。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和 B 必须具有相同的大小。

structfun 函数说明

对标量结构体的每个字段应用函数此 MATLAB 函数 将函数 func 应用于标量结构体 S 的每个字段,每次一个字段。然后 structfun 将 func 的输出串联成列向量A。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。A中的元素数等于 S 中的字段数。

猜你喜欢

转载自blog.csdn.net/qq_36320710/article/details/112248582
今日推荐