如何根据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
相关产品推荐
相关产品推荐

