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

相关推荐
不仙5209 小时前
VMware Workstation 26.0.0 在 Ubuntu 24.04 (内核 6.17.0) 上的安装与内核模块编译问题
linux·ubuntu·elasticsearch
dapeng-大鹏10 小时前
KVM+LVM 零停机在线扩容 Ubuntu 根分区:从磁盘添加到逻辑卷扩展完整
linux·运维·ubuntu·磁盘空间扩展
SelectDB12 小时前
Agent 时代,为什么传统的可观测方案不适用了?
大数据·数据库·数据分析
kejiayuan12 小时前
FineBI组件制作-构成分析类图表
数据分析·数据可视化·finebi
love530love12 小时前
MingLi-Bench 项目部署实录:基于 EPGF 架构的工程化实践
人工智能·windows·python·架构·aigc·epgf·mingli-bench
kejiayuan13 小时前
FineBI组件制作-流向分析类图表
数据分析·数据可视化·finebi
YangYang9YangYan15 小时前
2026产品专员学习数据分析的价值与路径
学习·数据挖掘·数据分析
babe小鑫15 小时前
2026职场进阶:数据分析技能的价值与应用
数据挖掘·数据分析
小小菜鸟,可笑可笑15 小时前
Ubuntu 系统安装搜狗输入法 & 使用英文标点
ubuntu
leazer15 小时前
Flutter Windows 构建失败:.plugin_symlinks 符号链接异常的排查与修复
windows·flutter