You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据ID匹配工作区对应名称的double变量并赋值给新变量?

解决Matlab中通过变量名字符串获取变量内容的问题

直接快速解决方案

你已经通过who拿到了变量名字符串,想要获取对应变量的内容,最直接的方式是使用eval函数执行字符串形式的变量调用:

ID = 100;
desired_variable_name = strcat('p', num2str(ID));
desired_variable = eval(desired_variable_name);

eval会将传入的字符串当作Matlab代码执行,这里就是把变量名字符串转换成实际变量,完成赋值。

更安全规范的替代方案

eval虽然简单,但如果ID来源不可控(比如外部输入),存在代码注入风险,更推荐用结构体或**容器映射(containers.Map)**来管理这类命名有规律的变量:

方法1:使用结构体统一管理

先把所有p开头的变量存入结构体,后续直接通过字段名访问:

% 初始化结构体
participant_data = struct();
% 获取所有p开头的变量名
p_vars = who('p*');
% 批量存入结构体
for idx = 1:length(p_vars)
    participant_data.(p_vars{idx}) = eval(p_vars{idx});
end

% 后续根据ID获取变量内容
desired_variable = participant_data.(strcat('p', num2str(ID)));

方法2:使用containers.Map

如果需要更灵活的键值对访问,可使用容器映射:

% 初始化容器映射
participant_map = containers.Map();
p_vars = who('p*');
for idx = 1:length(p_vars)
    participant_map(p_vars{idx}) = eval(p_vars{idx});
end

% 根据ID获取内容
desired_variable = participant_map(strcat('p', num2str(ID)));

补充说明

你之前用who得到的只是变量名的字符串数组,并非变量本身,所以无法直接赋值。上述方法都是将字符串形式的变量名转换为可访问的变量实体,从而完成内容复制。

内容的提问来源于stack exchange,提问作者Orestes_Fox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:52:44