Introduction
Eiffel-Loop contains a useful class EL_ARRAYED_MAP_LIST defined as an arrayed list of key-value pair tuples. It can be initialized from a hash table and converted to a hash table or a list of strings.
class
EL_ARRAYED_MAP_LIST [K -> HASHABLE, G]
inherit
EL_ARRAYED_LIST [TUPLE [key: K; value: G]]
rename
extend as map_extend
end
Descendants
The descendants of class EL_ARRAYED_MAP_LIST offer a convenient way to sort a list of things from a derived sort order key.
EL_ARRAYED_MAP_LIST (source links)
EL_SORTABLE_ARRAYED_MAP_LIST*
EL_KEY_SORTABLE_ARRAYED_MAP_LIST
EL_VALUE_SORTABLE_ARRAYED_MAP_LIST
Sort-by-key Example
Here is an example from class EL_UNIQUE_MACHINE_ID of sorting by a derived key.
mac_address: ARRAY [NATURAL_8]
local
ordered_list: EL_KEY_SORTABLE_ARRAYED_MAP_LIST [INTEGER, EL_IP_ADAPTER]
do
create ordered_list.make_sorted (new_adapter_list, agent order_key, True)
if ordered_list.is_empty then
create Result.make_filled (0, 1, 6)
else
Result := ordered_list.first.value.address
end
end
order_key (adapter: EL_IP_ADAPTER): INTEGER
local
order_list: like Selection_order
do
order_list := Selection_order
order_list.start
order_list.search (adapter.type)
Result := order_list.index
end
Sort-by-value Example
ordered_by_size (a_file_paths: ARRAY [EL_FILE_PATH]): ARRAY [EL_FILE_PATH]
-- Files to import
local
ordered_list: EL_VALUE_SORTABLE_ARRAYED_MAP_LIST [EL_FILE_PATH, INTEGER]
do
create ordered_list.make_sorted (a_file_paths, agent File_system.file_byte_count, True)
Result := ordered_list.key_list.to_array
end