Сопряжение элементов коллекции в F # - PullRequest
0 голосов
/ 29 марта 2020

Я смотрю на список функций сбора здесь: https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/fsharp-collection-types

, но я не могу найти то, что ищу.

У меня есть список элементов:

[ 3; 4; 5; 6; 7; 8 ]

, и я ищу что-то вроде этого:

[ 3; 4; 5; 6; 7; 8 ]
|> List.iterPair (fun x y -> ())

, где бы он прошел мимо:

3 4
4 5
5 6
6 7
7 8

Есть Есть ли способ сделать это с помощью встроенных функций?

1 Ответ

0 голосов
/ 29 марта 2020

Эта операция обычно известна как pairwise:

И действительно, есть List.pairwise, который возвращает кортеж.

list 
|> List.pairwise
|> List.iter(fun (x, y) -> printfn "%d %d" x y)

Дает ожидаемый результат.

Более общий способ думать об этом:

List.zip (list |> List.skip 1) list

Поскольку в Linq отсутствует парное соединение:

items.Zip(items.Skip(1), (a, b) => a, b)

Конечно, было бы более эффективно с scan, но это более читабельно.

...