You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 13:13:13