Matlab中对象属性为字符类型时,如何获取独立名称向量?
解决char类型Name获取独立名称向量的问题
场景背景
定义如下Person类:
classdef Person properties Name Age Weight end methods function obj = Person(name, age, weight) obj.Name = name; obj.Age = age; obj.Weight = weight; end end end
当传入string类型的Name时,执行以下代码可得到1×3的string数组:
angus = Person("Angus Comber", 40, 73); lisa = Person("Lisa Comber", 39, 60); jack = Person("Jack Comber", 4, 15); family = [angus lisa jack]; just_names = [family(:).Name];
输出结果:
>> just_names just_names = 1×3 string array "Angus Comber" "Lisa Comber" "Jack Comber"
但如果传入char类型的Name,执行相同代码会得到拼接后的字符数组:
angus = Person('Angus Comber', 40, 73); lisa = Person('Lisa Comber', 39, 60); jack = Person('Jack Comber', 4, 15); family = [angus lisa jack]; just_names = [family(:).Name];
输出结果:
>> just_names just_names = 'Angus ComberLisa ComberJack Comber'
解决方法
方法1:转换为string数组
通过string()函数将char类型的Name转换为string,再组合成独立元素的数组:
just_names = string({family(:).Name});
执行后会得到1×3的string数组,每个元素对应独立的名称。
方法2:构建cell数组
如果需要保留char类型的原始格式,可以用大括号直接构建cell数组,每个元素为独立的char名称:
just_names = {family(:).Name};
此时just_names是3×1的cell数组,可通过just_names{index}访问单个名称。
方法3:修改Person类属性类型
从根源上避免问题,在类定义中指定Name属性的类型为string,MATLAB会自动将传入的char类型转换为string:
classdef Person properties Name string % 指定属性类型为string Age Weight end methods function obj = Person(name, age, weight) obj.Name = name; obj.Age = age; obj.Weight = weight; end end end
修改后,即使传入char类型的Name,执行[family(:).Name]仍会得到独立的string数组。
内容的提问来源于stack exchange,提问作者Angus Comber
相关产品推荐
相关产品推荐

