Mercurial > forge
changeset 6622:ed18a7a15cac octave-forge
undo last change, provide better solution
author | highegg |
---|---|
date | Thu, 28 Jan 2010 20:25:13 +0000 |
parents | 093c07d22b33 |
children | 0523b73762db |
files | main/general/inst/@dict/dict.m main/general/inst/@dict/join.m main/general/inst/@dict/struct.m main/general/inst/@dict/subsasgn.m |
diffstat | 4 files changed, 16 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/main/general/inst/@dict/dict.m Thu Jan 28 15:40:42 2010 +0000 +++ b/main/general/inst/@dict/dict.m Thu Jan 28 20:25:13 2010 +0000 @@ -57,24 +57,24 @@ function d = dict (keys, values) if (nargin == 0) - keys = values = {}; + keys = values = cell (0, 1); elseif (nargin == 1) if (iscellstr (keys)) - keys = sort (keys(:).'); + keys = sort (keys(:)); values = cell (numel (keys), 1); elseif (isstruct (keys)) - values = struct2cell (keys)(:,:).'; - if (rows (values) != 1) + values = struct2cell (keys)(:,:); + if (columns (values) != 1) error ("dict: structure must be a scalar"); endif - [keys, ind] = sort (fieldnames (keys).'); + [keys, ind] = sort (fieldnames (keys)); values = values(ind); else error ("dict: keys must be a cell vector of strings"); endif elseif (nargin == 2) - [keys, idx] = sort (keys(:).'); - values = values (idx)(:).'; + [keys, idx] = sort (keys(:)); + values = values (idx)(:); else print_usage (); endif
--- a/main/general/inst/@dict/join.m Thu Jan 28 15:40:42 2010 +0000 +++ b/main/general/inst/@dict/join.m Thu Jan 28 20:25:13 2010 +0000 @@ -30,8 +30,8 @@ keys1 = d1.keys; keys2 = d2.keys; - [keys, idx] = sort ([keys1, keys2]); - values = [d1.values, d2.values](idx); + [keys, idx] = sort ([keys1; keys2]); + values = [d1.values; d2.values](idx); n = numel (keys); if (n > 1)
--- a/main/general/inst/@dict/struct.m Thu Jan 28 15:40:42 2010 +0000 +++ b/main/general/inst/@dict/struct.m Thu Jan 28 20:25:13 2010 +0000 @@ -26,7 +26,7 @@ keys = d.keys; valid = cellfun (@isvarname, keys); if (all (valid)) - s = cell2struct (d.values, keys, 2); + s = cell2struct (d.values, keys, 3); else error ("struct: invalid key value: %s", keys{find (! valid, 1)}); endif
--- a/main/general/inst/@dict/subsasgn.m Thu Jan 28 15:40:42 2010 +0000 +++ b/main/general/inst/@dict/subsasgn.m Thu Jan 28 20:25:13 2010 +0000 @@ -52,9 +52,9 @@ endif ## Look up the proper place to insert the new key. i = lookup (d.keys, ind); - d.keys = [d.keys(1:i), {ind}, d.keys(i+1:end)]; + d.keys = [d.keys(1:i,1); {ind}; d.keys(i+1:end)]; ## Insert value. - d.values = [d.values(1:i), {val}, d.values(i+1:end)]; + d.values = [d.values(1:i,1); {val}; d.values(i+1:end,1)]; endif elseif (iscellstr (ind)) ## Multiple assignment case. Perform checks. @@ -73,8 +73,6 @@ elseif (numel (ind) != numel (val)) error ("numbers of elements of index and rhs must match"); endif - val = val(:).'; - ind = ind(:).'; ## Choose from two paths. if (numel (ind) < numel (d.keys)) ## Scarce assignment. There's a good chance that all keys will be present. @@ -85,14 +83,14 @@ else d.values(i(mask)) = val(mask); mask = !mask; - [d.keys, i] = sort ([d.keys, ind(mask)]); - d.values = [d.values, val(mask)](i); + [d.keys, i] = sort ([d.keys; ind(mask)(:)]); + d.values = [d.values; val(mask)(:)](i); endif else ## Mass assignment. Probably most of the keys are new ones, so simply ## melt all together. - [d.keys, i] = unique ([d.keys, ind]); - d.values = [d.values, val](i); + [d.keys, i] = unique ([d.keys; ind(:)]); + d.values = [d.values; val(:)](i); endif else error ("expected cell rhs for cell index");