我在字符数组中有名称-值对:
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()
来摆脱任何前导/尾随空格。