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、数据表、实验数据等。

相关推荐
醇氧5 小时前
【Windows】优雅启动:解析一个 Java 服务的后台启动脚本
java·开发语言·windows
石像鬼₧魂石5 小时前
如何配置Fail2Ban的Jail?
linux·学习·ubuntu
未来魔导5 小时前
go语言中json操作总结
数据分析·go·json
小小代码团7 小时前
2026 Office Online Server (全网最新/最详细/含问题修复) 终极部署教程
windows·microsoft·c#
爱吃山竹的大肚肚8 小时前
EasyPOI 大数据导出
java·linux·windows
公子无缘8 小时前
【Windows】关闭Windows Update自动更新2
windows
gugugu.10 小时前
Redis Set类型完全指南:无序集合的原理与应用
数据库·windows·redis
历程里程碑11 小时前
C++ 9 stack_queue:数据结构的核心奥秘
java·开发语言·数据结构·c++·windows·笔记·算法
醇氧11 小时前
【Windows】从守护到终结:解析一个 Java 服务的优雅停止脚本
java·开发语言·windows
阿达_优阅达11 小时前
Tableau 2025.3 发布!可视化扩展升级、Server 版 Agent、平台数据 API,让 AI 深度融入业务工作流
人工智能·ai·数据分析·数据可视化·仪表板·tableau·版本更新