合并来自不同来源的不同类型的数据

时间:2016-05-10 12:20:19

标签: f#

我有四个通过公共ID(递增整数)相关的数据源。

一个数据源P始终可用,其他三个L可能或可能不可用于给定ID(即ID不能保证存在)并通过互联网接收,并通过其IP地址进行区分。

我在一段时间内收集数据源,然后我想使用他们的ID加入他们。

我的心理模型是这样的

  • 区间P
  • 中来源P: List<'T>的数据
  • 来自所有L来源的数据:L: List<Dictionary<string, 'U>>
  • 从来源P a: 'T -> int
  • 获取ID
  • L来源b: 'U -> int
  • 获取ID
  • 数据合并的结果类型'V = {Id: int; P: 'T; L: Dictionary<string, 'U> }
  • 结果R: List<'V>

在我使用哈希集和诸如此类的东西运行之前,如何获得有关如何执行此操作的一些想法会很好。也许有一些很酷的F#功能让这很容易。

1 个答案:

答案 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相关的数据(例如)。