【问题标题】:Which data structure and algorithm I should look into to be able to implement a compilation of data from different sources with precedence我应该研究哪种数据结构和算法,以便能够优先编译来自不同来源的数据
【发布时间】:2022-12-10 08:51:25
【问题描述】:

我的问题的要求是:

  • 通过创建对象的标准形状来标准化来自不同来源的数据。由于这些不同的源可能具有不同的对象形状,因此某些字段可能有数据,而某些字段可能没有。
  • 数据将根据优先级进行编译。这意味着具有最高优先级的这些数据源中的任何一个都将成为最终对象的值源。
  • 可以为整个对象或在字段级别配置优先级。这意味着,在字段级别配置的优先级可以覆盖数据源的整个对象优先级。
  • 如果字段为空,它将根据其优先级查找下一个数据源。

伪代码

Whole object priority is the default.
interface SampleStandardData {
   field1 <-- priority here should override the whole object's priority
   field2
   field3 <-- can be a nested object
}

/**
*  different data sources that conforms to the standard
*  shape. If fields are missing from the sources then
*  the field will be null.
*/ 
const dataSources: Array<SampleStandardData> = [
  DataSourceOne,
  DataSourceTwo,
]

/**
* Conclude which data made it to the final object 
* that each could come from different sources
*/
const finalObject: SampleStandardData = compile(
  dataSources,   // Expecting to accept multiple data sources
  priorityConfig, // Configure priority one way or another
)

我是 DS 和 Algo 的新手。我目前将用我目前所知道的来实现一个穷人的版本(我可能只使用数组并迭代和添加逻辑)。一旦我认为我有一个很好的进展,我会在这里更新它。我只是希望有人能给我指出正确的方向(希望我可以直接跳过去而不是研究所有的东西并了解是否有我可以使用的东西)以了解我可以研究和研究哪些现有解决方案。

【问题讨论】:

  • 如果具有最高优先级的数据源遗漏了一个字段,但该字段存在于另一个数据源中,该字段是否应该被水化?
  • 物体是平的,还是物体本身可能有场?这些对象可以实现不同的“SampleStandardData”接口吗?
  • @AloisChristen 如果缺少该字段,那么它将在优先级列表中查找下一个数据源。如果仍然没有,那么它将为空。
  • @AloisChristen 它可以是嵌套对象。
  • 不过很快:创建一个接口,每个字段都是一组有序的源。这将是该字段源的优先级。您可以在构造对象时使用 priorityConfig 完成这些优先级设置。现在一个有趣的问题是如何从源中获取数据:如果加载很耗时,您可能希望从每个源加载完整的对象。但是如果对象有很多字段,您可能只想加载当前不存在的字段。

标签: algorithm data-structures


【解决方案1】:

我最终做的是,我创建了一个 typescript 实用程序类型,它接受数据源形状/类型,并用代表优先级的数字替换字段属性。

type Data {
  fieldOne: string
}

type Priority = number
 
const configuration: ConvertToPriorityConfig<Data> = {
    fieldOne: 100 // <-- fieldOne is now type Priority
}

此实用程序类型对于嵌套对象也是递归的

合并现在接受与其自身配置配对的一组数据源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2013-11-12
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多