В F# модуль List
предоставляет мощные функции для работы со списками. Однако при работе с универсальным типом List
может возникнуть необходимость преобразовать его в обычный список F#. В этой статье мы рассмотрим несколько методов выполнения этой задачи, используя простые примеры кода и разговорный язык.
Метод 1: использование List.ofSeq
Функция List.ofSeq
позволяет нам преобразовать любую последовательность, включая общий List
, в список F#. Вот пример:
open System.Collections.Generic
let genericList = new List<int>([1; 2; 3; 4; 5])
let fsharpList = List.ofSeq genericList
printfn "%A" fsharpList // Output: [1; 2; 3; 4; 5]
Метод 2: сопоставление с образцом со списком
Сопоставление с образцом F# — это мощная функция, которую можно использовать для преобразования общего List
в список F#. Вот пример:
open System.Collections.Generic
let genericList = new List<int>([1; 2; 3; 4; 5])
let fsharpList =
match genericList with
| :? List<int> as l -> l
| _ -> failwith "Invalid list type"
printfn "%A" fsharpList // Output: [1; 2; 3; 4; 5]
Метод 3: использование List.map
Функция List.map
позволяет нам применить преобразование к каждому элементу списка. Мы можем использовать его для преобразования общего List
в список F# путем сопоставления каждого элемента самому себе. Вот пример:
open System.Collections.Generic
let genericList = new List<int>([1; 2; 3; 4; 5])
let fsharpList = List.map id genericList
printfn "%A" fsharpList // Output: [1; 2; 3; 4; 5]
Метод 4: понимание списков
F# поддерживает понимание списков, которое обеспечивает краткий синтаксис для создания списков. Мы можем использовать эту функцию для преобразования общего List
в список F#. Вот пример:
open System.Collections.Generic
let genericList = new List<int>([1; 2; 3; 4; 5])
let fsharpList = [for x in genericList -> x]
printfn "%A" fsharpList // Output: [1; 2; 3; 4; 5]
Метод 5: использование List.fold
Функция List.fold
позволяет нам агрегировать значения из списка. Мы можем использовать его для преобразования общего List
в список F#, складывая каждый элемент в новый список. Вот пример:
open System.Collections.Generic
let genericList = new List<int>([1; 2; 3; 4; 5])
let fsharpList = List.fold (fun acc x -> x :: acc) [] genericList |> List.rev
printfn "%A" fsharpList // Output: [1; 2; 3; 4; 5]
В этой статье мы рассмотрели пять различных методов преобразования общего List
в список F#. Предпочитаете ли вы использовать встроенные функции, такие как List.ofSeq
, сопоставление с образцом или использование списков, существует несколько способов достижения одного и того же результата. Поняв эти методы, вы сможете беспрепятственно работать с универсальными типами List
в своем коде F#.