扁平化嵌套数据结构
扁平化嵌套数据结构
当我们想要根据数据嵌套属性过滤信息时,处理嵌套数据可能是一个棘手的问题。例如,从下面的数据集中,我们想要创建一个方法,该方法可以根据作为参数传递的项目名称返回“Fruits”或“Vegetables”:
数据库中的每个对象都被归类为具有类型的“水果”或“蔬菜”,在该类型中我们有许多单独的项目。我发现树形结构图有助于轻松理解嵌套数据:
Tree diagram of nested JSON
对于我们来说,我们可以直观地猜测一个物品是否是一种蔬菜水果,并给出它的名字。我们的挑战是创建一个可以接收项目名称并返回其类别(水果或蔬菜)的方法。然而,计算机必须通过过滤这个嵌套数据结构来解决这个问题。
为此,我们希望创建可以轻松过滤的扁平数据。以下是使用 Scala 案例类的所需平面结构中的数据示例模型:
所以我们现在可以创建一个服务/助手,它可以展平数据,然后通过它过滤找到与给定参数匹配的名称。让我们从定义我们的函数输入和输出开始:
我们使用一个空的 列表() 为了确保我们的代码可以编译。我们的对象方法用于将数据转换为易于过滤的结构。就像编程中的所有事情一样,增量方法是最有效的,所以我们首先将这些数据扁平化为一层嵌套:
在这第一步中,我们分解了第一层嵌套,将项目类别和 itemsWithinCategory 保存为变量。我们已经使用 foldLeft 来解构第一层嵌套,我们可以以类似的方式再次使用它来解构保存在“itemsWithinCategory”变量中的第二层。
此时,我们已经使用 foldLeft 提取并保存了创建扁平数据对象“FlatFruitOrVeg”所需的每条信息。我们现在可以映射这些值以生成我们扁平化的数据结构。
通过第 16 行,我们可以验证 FlatFruitOrVeg 的扁平化列表是否正确。现在我们已经达到了预期的结果,我们可以重构这个方法:
现在我们有了一个可以展平接收到的嵌套数据的方法,我们可以过滤以搜索包含搜索名称的项目并返回其类别:
完美的 !这 ” getCategoryByItemName ” 方法现在可以接受项目的名称作为参数并返回匹配的类别。这允许计算机通过项目名称来确定它是水果还是蔬菜。
我发现这种重组嵌套数据的方法非常有趣,我喜欢使用简单的增量过程来系统地查看最终目标的进展情况。通过将每个步骤打印到控制台,您可以断言输出与每个阶段的预期结果相匹配,从而最大限度地减少错误。
谢谢瑞恩皮埃尔@ 制造商 领导一个伟大的研讨会,激发了这篇文章。希望对你有用!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明