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

相关推荐
Mr数据杨1 小时前
K均值聚类与Apriori应用探索中医证素数据分析
均值算法·数据分析·聚类
杰克尼2 小时前
Java基础-stream流的使用
java·windows·python
@BreCaspian3 小时前
Kazam产生.movie.mux后恢复视频为.mp4
linux·ubuntu·音视频
爱地球的曲奇3 小时前
Linux环境下(Ubuntu)Fortran语言如何安装配置NetCDF
linux·ubuntu·netcdf
limnade3 小时前
falsk windows 服务器部署-解决服务器外无法访问
服务器·windows·flask·智能路由器
时凯凯凯凯3 小时前
使用 Vive Tracker 替代 T265 实现位姿获取(基于 Ubuntu + SteamVR)
linux·ubuntu·目标跟踪·slam
KS、zheng4 小时前
【DOCKER】Windows Server 2016 Datacenter离线安装Docker引擎
windows·docker·容器
枫叶梨花6 小时前
使用Go语言获取Windows系统信息:从CPU到电池的全维度监控
开发语言·windows·golang
@十八子德月生6 小时前
第三阶段—8天Python从入门到精通【itheima】-143节(pyspark实战——数据计算——flatmap方法)
大数据·开发语言·python·数据分析·pyspark·好好学习,天天向上·question answer
努力一点9488 小时前
ubuntu22.04系统实践 linux基础入门命令(三) 用户管理命令
linux·运维·服务器·人工智能·ubuntu·gpu算力