F # разбить массив строк и вернуть результат разбиения - PullRequest
0 голосов
/ 30 октября 2011
let total = [| "1X2"; "3X4"; "5X6" |]

let oddEven = total
            |> Array.map(fun x -> x.Split('X'))

У меня есть массив строк, который является полным в приведенном выше примере, я хочу разделить массив на «X», как oddEven в приведенном выше примере, но я хочу вернуть 2 массива строк:

let odd = [| 1; 3; 5 |] и let even = [| 2; 4; 6 |]

Это может быть легкой задачей, но я не могу понять это сейчас. Любая помощь с благодарностью! Спасибо,

Ответы [ 3 ]

4 голосов
/ 30 октября 2011

Вы должны проверить, может ли каждая строка разбиться на две части, и распаковать результат:

let total = [| "1X2"; "3X4"; "5X6" |]

let odds, evens = total |> Array.map (fun x ->  match x.Split('X') with
                                                | [|odd; even|] -> odd, even
                                                | _ -> failwith "Wrong input")
                        |> Array.unzip;;
2 голосов
/ 30 октября 2011
let evens, odds = total 
                  |> (Array.map (fun x -> x.Split('X')))
                  |> Array.concat
                  |> Array.partition (fun s -> int s % 2 = 0)

РЕДАКТИРОВАТЬ: Как отметил Джон Палмер в комментариях, вы можете использовать Array.collect вместо map и concat:

let evens, odds = total 
                    |> Array.collect (fun s -> s.Split('X')) 
                    |> Array.partition (fun s -> int s % 2 = 0);;
0 голосов
/ 30 октября 2011
let odd = 
    oddEven |> Array.map (fun x -> x.[0])
let even =
    oddEven |> Array.map (fun x -> x.[1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...