Search code examples
matlabsortingcontainerskey

reorganize keys of containers map


I create by iteration with a for loop a container map on matlab whose keys are for example :

keys(tab) = 1x3 cell array
{'long_Kinn'} {'long_pro'} {'long_tal'}

I would like to know if it is possible to bypass the alphanumeric ordering of the keys and reorganize them as : ?

keys(tab) = 1x3 cell array
{'long_pro'} {'long_tal'} {'long_Kinn'}

Matlab version 2020a


Solution

  • A map is, by definition, an unordered container. If the order is important, use an array, not a map.

    For example, if you currently map those keys to values A, B and C, create a cell array as follows:

    tab = {};
    tab{:, end + 1} = {'long_pro'; A};
    tab{:, end + 1} = {'long_tal'; B};
    tab{:, end + 1} = {'long_Kinn'; C};
    

    ...Which of course you’d do in your loop. Now insertion order is preserved.

    Appending to an array is not recommended, but this will be faster than adding to a containers.Map anyway. The orientation of the cell array above was chosen to make appending most efficient.

    If you need to use your cell array for lookup, you can do:

    value = tab{2, strcmp(tab(1,:), key)};
    

    This is not as pretty as lookup in a map, but it works just as fine as long as you don’t have a humongous amount of keys in your container.


    Alternatively, consider using a table object, since you seem to be working with tabular data.