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

相关推荐
绿箭柠檬茶2 天前
Ubuntu 服务器配置转发网络访问
服务器·网络·ubuntu
风_峰2 天前
Ubuntu Linux SD卡分区操作
嵌入式硬件·ubuntu·fpga开发
IT毕设梦工厂2 天前
大数据毕业设计选题推荐-基于大数据的客户购物订单数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·数据分析·spark·毕业设计·源码·bigdata
路由侠内网穿透2 天前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip
太空的旅行者2 天前
告别双系统——WSL2+UBUNTU在WIN上畅游LINUX
linux·运维·ubuntu
人工智能训练师2 天前
Ubuntu22.04如何安装新版本的Node.js和npm
linux·运维·前端·人工智能·ubuntu·npm·node.js
大数据CLUB2 天前
基于spark的澳洲光伏发电站选址预测
大数据·hadoop·分布式·数据分析·spark·数据开发
研华嵌入式2 天前
如何在高通跃龙QCS6490 Arm架构上使用Windows 11 IoT企业版?
arm开发·windows·嵌入式硬件
智数研析社2 天前
9120 部 TMDb 高分电影数据集 | 7 列全维度指标 (评分 / 热度 / 剧情)+API 权威源 | 电影趋势分析 / 推荐系统 / NLP 建模用
大数据·人工智能·python·深度学习·数据分析·数据集·数据清洗
qingyunliushuiyu2 天前
BI数据可视化:驱动数据价值释放的关键引擎
数据挖掘·数据分析·数据分析系统·数据分析平台·bi数据可视化