GNU Octave 基础教程(4):变量与数据类型详解(二)

------ cell 与 struct 的用法详解

本文是 Octave 基础教程系列的第 3 篇,介绍两种灵活的数据类型:cell(元胞)struct(结构体)。它们是组织复杂数据、处理异构信息的利器,语法和 MATLAB 基本一致。


✅ 一、什么是 Cell(元胞数组)?

在 Octave 中,普通数组只能存储一种类型的元素(如全是数值或全是字符)。而 cell 数组 可以存储不同类型的数据,比如:

  • 一个 cell 元素是字符串

  • 另一个是数值

  • 另一个是矩阵

就像"容器中的容器"。


🔹 1. 创建 Cell

C = {123, 'Octave', [1 2 3]};

现在:

  • C{1} 是数值 123

  • C{2} 是字符串 'Octave'

  • C{3} 是一个数组 [1 2 3]


🔹 2. 访问 Cell 元素

访问方式 含义 示例
C{1} 解引用(内容) 得到 123
C(1) cell 本体(仍是 cell) 得到 {123}

a = C{2}; % a = 'Octave' b = C(2); % b 仍然是一个 1×1 cell


🔹 3. 修改 Cell 内容

C{1} = 999; C{4} = "new item"; % 添加新元素(双引号也是字符串)


🔹 4. 常见用法示例:混合数据表

row1 = {'Tom', 18, 88.5}; row2 = {'Lucy', 20, 92.0}; table = {row1; row2}; disp(table{2, 3}); % 输出第2行第3列:92.0


✅ 二、什么是 Struct(结构体)?

结构体 是一种以字段(field)方式组织数据的容器。适合表示带属性的对象,例如:学生、员工、实验结果等。


🔹 1. 创建结构体

student.name = 'Alice'; student.age = 21; student.score = 95.5;


🔹 2. 访问字段

student.name % 输出 'Alice' student.age % 输出 21


🔹 3. 修改字段

student.score = 100; % 改分数 student.major = 'Physics'; % 添加新字段


🔹 4. 结构体数组

s(1).name = 'Tom'; s(1).score = 90; s(2).name = 'Jerry'; s(2).score = 88; disp(s(2).name); % 输出 Jerry

结构体数组可用于组织一组对象。


📌 Cell vs Struct 对比表

特性 Cell 元胞 Struct 结构体
是否支持混合类型 ✅ 是 ✅ 是
是否有字段名 ❌ 否 ✅ 有
访问方式 数字索引 {} 点号字段名 .
是否支持数组 ✅ 支持多行列 ✅ 支持结构体数组

🔍 小技巧

  • isstruct(x) 检查是否是结构体

  • iscell(x) 检查是否是 cell

  • fieldnames(s) 获取结构体字段名

  • numel(C) 获取 cell 元素数量


🧪 实用示例:用 struct + cell 存表格数据

复制代码

octave

CopyEdit

data(1).name = '张三'; data(1).scores = {90, 88, 95}; % 三门成绩 data(2).name = '李四'; data(2).scores = {85, 92, 89}; disp(data(2).scores{2}); % 输出 李四 的第二门成绩:92


🧾 总结

类型 特点 应用场景
cell 存储混合类型内容、矩阵、字符串等 表格行列数据、灵活容器
struct 用字段组织数据,有语义 对象、记录、配置、JSON风格数据

掌握 cellstruct 后,你可以处理各种灵活数据格式,包括 JSON、数据表、实验数据等。

相关推荐
q***518926 分钟前
ubuntu 安装 Redis
linux·redis·ubuntu
稻谷君W3 小时前
Ubuntu 远程访问 Win11 WSL2 并固定访问教程
linux·运维·ubuntu
学术小白人4 小时前
会议第一轮投稿!2026年物联网、数据科学与先进计算国际学术会议(IDSAC2026)
人工智能·物联网·数据分析·能源·制造·教育·rdlink研发家
柳暗花再明4 小时前
Visio 中设置文本框背景透明的方法
人工智能·windows
天庭鸡腿哥4 小时前
大小只有4K的软件,可让系统瞬间丝滑!
运维·服务器·windows·microsoft·everything
虚伪的空想家4 小时前
华为昇腾Atlas 800 A2物理服务器开启VT-d模式
运维·服务器·ubuntu·kvm·vt-d·直通
q***18846 小时前
Ubuntu上安装、使用Redis的详细教程
redis·ubuntu·bootstrap
人工智能训练6 小时前
windows系统中的docker,xinference直接运行在容器目录和持载在宿主机目录中的区别
linux·服务器·人工智能·windows·ubuntu·docker·容器
q***65696 小时前
Windows环境下安装Redis并设置Redis开机自启
数据库·windows·redis
q***47437 小时前
Windows 和 Linux 系统下,如何查看 Redis 的版本号?
linux·windows·redis