我有四个通过公共ID(递增整数)相关的数据源。
一个数据源P
始终可用,其他三个L
可能或可能不可用于给定ID(即ID不能保证存在)并通过互联网接收,并通过其IP地址进行区分。
我在一段时间内收集数据源,然后我想使用他们的ID加入他们。
我的心理模型是这样的
P
P: List<'T>
的数据
L
来源的数据:L: List<Dictionary<string, 'U>>
P
a: 'T -> int
L
来源b: 'U -> int
'V = {Id: int; P: 'T; L: Dictionary<string, 'U> }
R: List<'V>
在我使用哈希集和诸如此类的东西运行之前,如何获得有关如何执行此操作的一些想法会很好。也许有一些很酷的F#功能让这很容易。
答案 0 :(得分:2)
我认为您可以更直接地将您的域模型转换为F#中的类型。
一个数据源P始终可用,其他三个L's可以或 可能无法获得给定的ID(即不保证ID 存在)并通过互联网接收并可以区分 他们的IP地址。
这很好地描述了F#中的记录类型。
type MyDataSources =
{Id: int;
P : MyDataSource;
L1: MyOtherDataSource option;
L2: MyOtherDataSource option;
L3: MyOtherDataSource option;}
我在一段时间内收集数据源然后我想 使用他们的ID加入他们。
因此,我们需要另一种数据记录类型。
type JoinedData<'T, 'U> =
{PData : 'T list;
L1Data : 'U list option;
L2Data : 'U list option;
L3Data : 'U list option;}
然后我们只需要一个获取数据源并填充数据的函数。
let populateDataFromSources dataSources =
{PData = getDataFrom dataSources.P // replace with whatever logic you want here
....
}
如果需要,您的getDataFrom
函数可以将数据源中的Id
作为参数并过滤返回的与Id
相关的数据(例如)。