【发布时间】:2015-05-05 14:57:45
【问题描述】:
我有以下代码:
open System
open System.Linq
type Child = {
id: Guid
name: int
parent: Guid
}
type Parent = {
id: Guid
name: int
children: seq<Guid>
}
let makeChild name parentId =
{
Child.id = Guid.NewGuid()
name = name
parent = parentId
}
let makeParent (group: IGrouping<int, int>) =
let id = Guid.NewGuid()
let children = group |> Seq.map (fun x -> makeChild x id)
let ids = children |> Seq.map (fun x -> x.id)
({
Parent.id = id
name = group.Key
children = ids
}, children)
let makeAll (groups: seq<IGrouping<int, int>>) =
let result = groups |> Seq.map (fun x -> makeParent x)
let children = result |> Seq.map (fun x -> snd x) |> Seq.concat
let parents = result |> Seq.map (fun x -> fst x)
(parents, children)
(我接受IGrouping<int, int> 而不是seq<int * seq<int>>,因为此代码需要与C# 互操作。)
但是,当我运行以下内容时:
let parents, children = makeAll(Enumerable.Range(0, 100).GroupBy(fun x -> x % 10))
那么没有任何孩子。[i].parent guids 与父母相关。[j].children.[k] i、j、k 的 guid。
为什么不是这样?我怎样才能做到这一点?
【问题讨论】:
标签: f#