`

根据依赖进行数据排序的示例

 
阅读更多

有个需求是进行多个js代码合并,js之间有互相依赖,依赖关系已经整理出,如

 

a depends on [b, d, e]

e depends on [c]

d depends on [c, e]

...

 

要做一个排序,一开始想,用个sort传个Comparator,比就可以了

ll.sort{a, b ->

// 没有任何依赖的排前面

if(!depends[a])

  return -1

if(!depends[b])

  return 1

 

if(depends[a].contains(b))

return 1

if(depends[b].contains(a))

return -1

 

return 0

}

结果发现根本不是这么回事儿

默认快速排序,排到前面的,不会再和后面的继续比较

 

所以就写了下面的这些代码

 

def ll = [a, b, c, d, e]
def depends = ...

def rll = []
// 不依赖其他的排到前面
rll.addAll(ll.grep{!depends[it]})
// 依赖非本次排序的模块的拍到前面
rll.addAll(ll.grep{
	def dLl = depends[it]
	dLl && dLl.every{one -> !ll.contains(one)}
})

// 最多循环次数,防止死循环
int loopCount = ll.size()
while(rll.size() != ll.size() && loopCount >= 0){
	rll.addAll(ll.grep{
		def dLl = depends[it].grep{one -> 
			ll.contains(one)
		}

		// 排除已经在结果队列的
		// 把依赖都已经在结果队列的排进入
		!rll.contains(it) && dLl && dLl.every{one -> rll.contains(one)}
	})
	loopCount--
}
return rll
 

 

分享到:
评论

相关推荐

    移除 Simulink 的状态顺序依赖(示例 3):探索如何利用“带时间的结构”Simulink 数据格式来减轻排序...-matlab开发

    示例 3:探索如何利用“带时间的结构”Simulink 数据格式来缓解输入/输出/状态的排序和索引问题。 此脚本文件将显示以下内容: 1) 使用现有的结构格式选项消除对 Simulink 状态排序的 Simulink 状态排序的依赖,该...

    C语言进行文件读写操作的示例代码.pdf

    此外,C语言还具备很强的数据处理能力,可以支持多种数据类型,如整型、浮点型、字符型等,并提供了丰富的运算符和函数来实现各种数据处理操作。 C语言是一种结构式语言,它支持函数、数组、指针、结构体、联合体等...

    最简单的Android MVP 示例Demo

    这是一个基于MVP架构 + Rxjava + Retrofit + Okhttp 的示例程序,去除了和MVP无关的依赖库,适合刚接触MVP的童鞋。 model层: 只用于处理数据 view层: 用于处理界面交互 presenter层: 用于处理vm的业务逻辑 ...

    数据计算:我的书《用数据计算:数据行业入门》中的代码示例

    通过新的工具(例如Python编程和数据处理技术)向程序员介绍数据科学的概念和实践 解释普遍用于解决工程挑战的编程语言和数据处理系统 探索在大数据项目中使用的新工具和库 提出可在从软件仿真到可为数百万用户提供...

    wpf源码大全 精通C#3.0图书源码 详细源码 学习好用

    QueryOrderElement 演示通过XElement对XML元素进行排序。 QuerySubElement 演示通过XElement查询XML元素的子元素。 LoadXMLTree 演示通过XElement加载XML树。 第7章(\C07) 示例描述:本章介绍了WPF的...

    基于深度学习的故障诊断入门示例,包括数据预处理、模型搭建、模型训练.zip

    循环神经网络则适用于处理序列数据,如文本或时间序列数据,通过捕捉序列中的依赖关系来生成模型输出。 深度学习在许多领域都取得了显著的成果,包括计算机视觉及图像识别、自然语言处理、语音识别及生成、推荐系统...

    论文研究-XML多值依赖及其消除冗余模式的算法.pdf

    首先引入XML上的数据冗余及其消除处理示例,同时基于函数依赖,提出了规范化的DTD概念和XML DTD 规范化处理规则;其次通过XML多值依赖的定义,给出用于消除冗余模式的算法;最后给出用于XML模式及其消除冗余模式的...

    Zika-RNAseq-Pipeline:开放的RNA-Seq数据分析管道教程,其中包含最近处理Zika病毒研究中的数据的示例

    开放的RNA-Seq数据分析管道教程,其中包含最近处理Zika病毒研究中的数据的示例 辰王和AVI Ma'ayan BD2K-LINCS数据协调和集成中心(DCIC)位于纽约西奈山的伊坎医学院,纽约州10029美国 出版物 Wang Z和Ma'ayanA。一...

    基于Swoole扩展开发游戏服务器框架,示例实现h5游戏开发.rar

    * 实现前后端二进制封包解包,采用的是msgpack扩展,msgpack对数据进行了压缩,并实现粘包处理, 服务器加入了protobuf支付,tcp有测试例子 * 数据采用固定包头,包头4个字节存包体长度,包体前2个字节分别为cmd(主...

    java实现仿克里金插值生成插值数据

    java利用wContour实现对数据的插值,主要是先把需要插值的数据封装,我这边测试用的shp文件,你也可以将这个文件换成自己wkt数据进行插值;然后定义插值范围,也就是你这个数据的四周(左右上下)即可;亲测有效,已...

    go wails 桌面应用开发示例,股票交易情况查询

    仅供go wails学习使用,完整的代码示例,前端布局,全局加载,股票数据接口调用,响应数据处理和前端数据展示,下载即用: 要求:golang > 1.18,vue3 demo演示: 在frontpage文件夹下 npm install 安装前端依赖 项目...

    数据融合论文

    自动驾驶汽车引入具有挑战性的研究领域学科。一个挑战是用双传感器探测障碍物信息的组合,以生成环境,...占用网格映射算法在中央和图形处理上运行单位,允许对两种方法进行比较并强调根据应用情况,最好使用哪种方法。

    pointcloud_tutorial:使用PCL和Open3D对多维数据进行常见操作的代码示例

    本教程的目的是提供使用两个流行的库:点云库(PCL)和Open3D来处理3D或多维数据的示例。 这些示例将涵盖诸如I / O,功能,关键点,注册,细分和示例共识之类的主题。 初步和依赖项 您的系统应该有一个支持C ++ 11...

    Kotlin-Android-示例

    MVP架构具有Android体系结构组件和数据绑定的MVVM体系结构使用新的AndroidInjector使用Dagger2进行依赖项注入(在较旧的版本中也可以找到没有它的示例) 使用翻新创建网络请求使用Room Persistence Library保留数据...

    浅谈大数据及大数据分析.doc

    鉴于数据本 身的复杂性,由此得出的必然结果是,首选的大数据处理方法是在并行计算环境中使用 大规模并行处理(MPP),从而实现同时进行并行接收以及数据加载和分析。大多数大数 据在本质上是非结构化或半结构化数据...

    C#23种设计模式_示例源代码及PDF

    观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...

    分布式数据层TDDL.zip

    淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作 一个数据库一样操作多个库。但是...

    aws-batch-example:AWS批处理的示例使用

    另一种方法是让处理作业安排其依赖作业,指示那些依赖作业在何处查找其生成的数据。 可以采用多种方式使用批处理,这只是一个示例。 为什么我认为批处理很酷 AWS Batch可以为您管理基础架构,并根据队列中的作业...

    SensorSystem:SensorSystem 库为严重依赖收集和处理传感器数据的应用程序提供了一个基本框架

    传感器系统SensorSystem 库为严重依赖收集和处理传感器数据的应用程序提供了一个基本框架。 每个 SensorSystem 的根是一个容器,它负责它所包含的组件的生命周期和依赖项管理。 组件的示例是传感器AccuracyManager ...

    基于VGG16+LSTM的二分类暴力行为检测算法python源码+项目说明+详细注释+示例图片.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习...5. 因数据量较大,处理时间较长,大约为2-3h。

Global site tag (gtag.js) - Google Analytics