У меня есть список записей
type Item = { Color : string; Size : int}
let itemList = [{Color="Red"; Size=1};
{Color="Green"; Size=2};
{Color="Blue"; Size=3};]
Я хочу, чтобы мой список записей превратился в массив значений, таких как
[| "Красный"; "Зеленый"; "Синий" |] или [| 1; 2; 3 |]
Я могу вот так вот добраться
type ItemType =
| Color of string
| Size of int
type ItemEnum =
| C
| S
let GetProp x y =
match x with
| C -> List.toArray y |> Array.map(fun x -> ItemType.Color(x.Color))
| S -> List.toArray y |> Array.map(fun x -> ItemType.Size(x.Size))
но когда я звоню GetProp S itemList
, я возвращаюсь [| Size 1; Размер 2; Размер 3 |]. Полезно, но не совсем то, что я ищу.
Я пробовал следующее
let GetProp2 x y : 'a[] =
match x with
| Color -> List.toArray y |> Array.map(fun x -> x.Color)
| Size -> List.toArray y |> Array.map(fun x -> x.Size)
но ему не нравятся два разных типа возвращаемых данных.
Я открыт для предложений о различных (более функциональных?) Способах сделать это и был бы признателен за ваш вклад.