首页 > 其他分享 >扁平化嵌套数据结构

扁平化嵌套数据结构

时间:2022-09-07 00:55:31浏览次数:81  
标签:扁平化 可以 嵌套 数据结构 数据 我们

扁平化嵌套数据结构

当我们想要根据数据嵌套属性过滤信息时,处理嵌套数据可能是一个棘手的问题。例如,从下面的数据集中,我们想要创建一个方法,该方法可以根据作为参数传递的项目名称返回“Fruits”或“Vegetables”:

数据库中的每个对象都被归类为具有类型的“水果”或“蔬菜”,在该类型中我们有许多单独的项目。我发现树形结构图有助于轻松理解嵌套数据:

Tree diagram of nested JSON

对于我们来说,我们可以直观地猜测一个物品是否是一种蔬菜水果,并给出它的名字。我们的挑战是创建一个可以接收项目名称并返回其类别(水果或蔬菜)的方法。然而,计算机必须通过过滤这个嵌套数据结构来解决这个问题。

为此,我们希望创建可以轻松过滤的扁平数据。以下是使用 Scala 案例类的所需平面结构中的数据示例模型:

所以我们现在可以创建一个服务/助手,它可以展平数据,然后通过它过滤找到与给定参数匹配的名称。让我们从定义我们的函数输入和输出开始:

我们使用一个空的 列表() 为了确保我们的代码可以编译。我们的对象方法用于将数据转换为易于过滤的结构。就像编程中的所有事情一样,增量方法是最有效的,所以我们首先将这些数据扁平化为一层嵌套:

在这第一步中,我们分解了第一层嵌套,将项目类别和 itemsWithinCategory 保存为变量。我们已经使用 foldLeft 来解构第一层嵌套,我们可以以类似的方式再次使用它来解构保存在“itemsWithinCategory”变量中的第二层。

此时,我们已经使用 foldLeft 提取并保存了创建扁平数据对象“FlatFruitOrVeg”所需的每条信息。我们现在可以映射这些值以生成我们扁平化的数据结构。

通过第 16 行,我们可以验证 FlatFruitOrVeg 的扁平化列表是否正确。现在我们已经达到了预期的结果,我们可以重构这个方法:

现在我们有了一个可以展平接收到的嵌套数据的方法,我们可以过滤以搜索包含搜索名称的项目并返回其类别:

完美的 !这 ” getCategoryByItemName ” 方法现在可以接受项目的名称作为参数并返回匹配的类别。这允许计算机通过项目名称来确定它是水果还是蔬菜。

我发现这种重组嵌套数据的方法非常有趣,我喜欢使用简单的增量过程来系统地查看最终目标的进展情况。通过将每个步骤打印到控制台,您可以断言输出与每个阶段的预期结果相匹配,从而最大限度地减少错误。

谢谢瑞恩皮埃尔@ 制造商 领导一个伟大的研讨会,激发了这篇文章。希望对你有用!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/20754/48570700

标签:扁平化,可以,嵌套,数据结构,数据,我们
From: https://www.cnblogs.com/amboke/p/16663879.html

相关文章

  • 组件的自定义事件和原生事件、组件的嵌套
    原生事件在原生组件(就是html标签)中事件是由系统来设计触发条件的:<div@click="fn">点我</div> 自定义事件在自定义组件中,事件是由自己来设计什么时候触发的......
  • 常用的提高读写效率的数据结构:哈希表,有序数组,搜索树
    哈希表:key-value的存储结构,把值放在数组中,用一个哈希函数把key换算成确定的位置,然后把value放在数组的这个位置,不可避免多个key值经过哈希算法后出现同一个值的情况,处理这......
  • C++数据结构课程设计
    C++数据结构课程设计《数据结构》课程设计指导书一、课程设计的目的课程设计为学生提供了一个独立实践的机会,将课本上的理论知识和实际问题结合起来,锻炼学生分析、解决......
  • 绪论:数据结构与算法
    数据结构数据 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合按照视点不同,把数据结构分为逻辑结构和物理结构 算法算法是解决特定问题求解步骤的描述......
  • 48. SQL--子查询(嵌套查询)
    1.前言子查询也称“内部查询”或者“嵌套查询”,是指将一个select查询(子查询)的结果作为另一个sql语句(主查询)的数据来源或者判断条件。子查询可以嵌入select、insert......
  • Qt-C2429:语言功能"嵌套命名空间定义"需要编译器标志"/std:c++latest"
     问题现象:今天早上在给同事讲代码时,打开工程,发现之前可以编译的工程,在未修改代码,未修改SDK的情况下,无法编译。并且提示如下:C2429:语言功能"嵌套命名空间定义"需要编译器......
  • 数据结构与算法学习笔记———链表(Linked List)
    链表(LinkedList)#该篇笔记转自【Python】python链表_小周ipython的博客-CSDN博客_python链表简介链表(LinkedList):是一种线性表数据结构。他是用一组任意的存储单元(可......
  • GO语言自学_005_类的嵌套_类的继承
    packagemainimport"fmt"//定义一个Human类typeHumanstruct{//属性namestringageintgenderstring}//定义一个学生类嵌套Human类typ......
  • 数据结构预算法学习笔记 —— 双端队列(Deque)
    双端队列(Deque)1.简介双端队列是一种有次序的数据集。和队列相似,其两端也可以称作为”首“”尾“段,但deque中数据项既可以从队首加入,也可以从队尾加入。同样,数据项也可以......
  • 数据结构与算法学习笔记 —— 队列(Queue)
     队列Queue1.简介队列是一种有次序的数据集合,其特征是数据项的添加和移除分别发生在该集合的两端:-数据项的添加发生在尾端(rear)-现存数据的移除发生在首......