Мне нужно определить матрицу типа int как тип. Столбец или строка матрицы представляют city
, элемент в матрице представляет distance
между городом строки и городом столбца. Размерность матрицы может изменяться (мы можем добавлять или удалять города), но она всегда довольно мала.
Я сомневаюсь среди int array array
, int list list
и типа с map
, который определяется следующим образом:
module MatOrd = struct
type t = string * string
let compare ((a, b): string * string) ((c, d) : string * string) =
if Pervasives.compare a c <> 0
then Pervasives.compare a c
else Pervasives.compare b d
end
module MatMap = Map.Make(MatOrd)
Тогда int MatMap.t
может представлять матрицу типа int. Преимущество этого определения заключается в том, что я могу напрямую написать название города в качестве координаты матрицы. Тогда как для int array array
и int list list
кажется, что я должен запомнить значение координат наизусть ...
Кроме того, правда ли, что мы не можем выполнить сопоставление с массивом? Например, мы не можем написать:
match a_array with
[| first_element; the_rest_elements |] -> ...
С теми преимуществами и недостатками, которые я упомянул или нет, какой тип вы предлагаете?