从字符数组中提取名称-值键对



我在字符数组中有名称-值对:

a = '{A=true, up=false, left=false, B=false, select=false, right=false, down=false, start=false}'

请注意,{荣誉都包含在数组中,大小为 1x92。

如何将所有键值对提取为单独的可访问值?

更紧凑的解决方案,无需循环:

s = regexp(a,'[{=, }]','split');
s(strcmp(s,{''})) = [];
name_val = [s(1:2:end) ; s(2:2:end)].'
name_val =
8×2 cell array
{'A'     }    {'true' }
{'up'    }    {'false'}
{'left'  }    {'false'}
{'B'     }    {'false'}
{'select'}    {'false'}
{'right' }    {'false'}
{'down'  }    {'false'}
{'start' }    {'false'}

strsplit()使用自定义分隔符是你的朋友:

a = '{A=true, up=false, left=false, B=false, select=false, right=false, down=false, start=false}';
% Get rid of leading and trailing characters, split on pairs
tmp = strsplit(a(2:end-1),',');
name_val = cell(numel(tmp,2));  % store in 2 column cell
for ii = 1:numel(tmp)
tmp2 = strsplit(tmp{ii}, '=');  % Split name-value pair on =
name_val{ii,1} = strtrim(tmp2{1});  % name
name_val{ii,2} = strtrim(tmp2{2});  % value
end
name_val =
8×2 cell array
{'A'     }    {'true' }
{'up'    }    {'false'}
{'left'  }    {'false'}
{'B'     }    {'false'}
{'select'}    {'false'}
{'right' }    {'false'}
{'down'  }    {'false'}
{'start' }    {'false'}

这将使您最终得到一个包含n行的单元格数组,与键值对一样多,以及 2 列:第一列为键,第二列为值。我选择了单元格,而不是结构,因为您的键名称具有不同的长度,并且如果您混合逻辑、数字和不作为键的内容,单元格允许第二列的灵活性。

我使用strtrim()来摆脱任何前导/尾随空格。

相关内容

  • 没有找到相关文章

最新更新