有个需求是进行多个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
分享到:
相关推荐
项目中的类可能会创建自定义依赖项属性,并在UI元素上进行数据绑定、事件处理等操作。例如: - 一个自定义的按钮控件,注册了一个`BackgroundColor`依赖项属性,用于改变按钮背景色。 - 通过数据绑定,将`...
这本书涵盖了各种图表类型、数据处理和自定义图形的技巧,旨在帮助读者掌握数据故事的视觉呈现。"示例代码"这部分内容提供了书中每个章节的实践代码,使读者能够亲手操作,加深理解。 在R语言中,数据可视化主要...
Sql缓存依赖是一种技术,主要用于提高应用程序的性能和效率,特别是在处理大量数据时。它的工作原理是基于数据库查询结果的缓存,当数据库中的数据发生变化时,能够及时通知应用程序更新缓存,避免了不必要的数据库...
这个示例附件“stock”很可能是用来演示如何在实际数据处理场景中应用这些技巧,例如在股票数据分析中,我们可能需要根据历史价格或交易量来计算趋势或预测未来走势。通过深入学习和实践,你可以充分利用Kettle的...
4. **集合视图(ICollectionView)**:WPF提供了ICollectionView接口,它是数据源的一个视图,可以进行排序、过滤和分页操作。这使得用户界面可以根据数据的特定状态进行动态更新。 5. **MVVM模式**:在WPF中,通常...
2. `ezmorph-1.0.6.jar`:这是一个转换工具库,Json-lib依赖它来进行数据类型的转换,如将字符串转换为日期等。 3. `Json-lib JSON Java dependency依赖包.txt`:这可能是一个文本文件,列出了Json-lib所依赖的所有...
6. **前端回调处理**: DataTables 在加载数据后,会触发`drawCallback`等回调函数,你可以在这里进行进一步的DOM操作或数据处理。 ### 案例分析 "checkdemo"可能是该项目的一个示例或测试模块,它可能包含了实现...
在GIS(地理信息系统)开发中,处理空间数据时经常需要用到GDAL库,它是一个开源的地理空间数据处理库。GDAL支持多种矢量和栅格数据格式,包括ESRI Shapefile(简称shp文件),这是一种广泛使用的地理空间数据格式。...
本示例代码着重展示了如何在Spring Boot应用中处理JSON数据。 1. **依赖引入**: 在`pom.xml`文件中,我们需要添加Spring Web依赖,因为处理JSON功能是基于Spring Web提供的。以下是一个简单的依赖配置示例: ``...
在给定的压缩包文件“24.HMM”中,包含了一些关于HMM实际应用的数据示例,特别是关于广义马尔可夫混合模型(Generalized Hidden Markov Model,简称GHMM)的实例。GHMM是HMM的扩展,允许状态空间的离散化程度不同,...
Vue.js 是一款流行的前端JavaScript框架,它以组件化、易用性...通过这个示例,你可以进一步掌握JavaScript开发中使用Vue.js进行数据绑定和状态管理的技巧,这对于任何想要涉足前端开发的程序员来说都是非常有价值的。
无论是处理数据库记录、优化数据结构还是解决复杂问题,排序算法都是基础工具。在本文中,我们将深入探讨内部排序算法,包括它们的工作原理、优缺点以及如何使用Python、JavaScript、Java、Go和PHP这些编程语言来...
尽管冒泡排序效率不高,但对于小规模数据和部分有序的数据,它仍然是一种实用的排序方法,尤其适合教学和理解排序算法的基本原理。 在提供的"冒泡排序示例"文件中,很可能是包含了用不同编程语言实现冒泡排序的代码...
Kettle,全称为Pentaho Data Integration...总之,"Kettle插件开发官方示例"是学习和实践Kettle插件开发的重要资源,通过深入研究和模仿这些示例,开发者可以提升自己的技能,更好地利用Kettle解决复杂的数据处理问题。
总结来说,无论是在Eclipse还是Android Studio,Google Gson库都是处理JSON数据的强大工具。通过简单易用的API,我们可以轻松地将JSON与Java对象相互转换,极大地提高了开发效率。在实际项目中,理解并熟练掌握Gson...
在WPF(Windows Presentation Foundation)开发中,依赖属性(Dependency Property)是实现数据绑定的关键机制。...在实际开发中,根据需求自定义依赖属性并实现数据绑定,能够实现灵活且动态的数据驱动UI。
在PB应用中,数据窗口经常被用于数据的展示和交互,而通用排序功能则是数据窗口的一个关键特性,允许用户根据特定需求对数据进行升序或降序排列。 1. **数据窗口的排序方式** - **内置排序**:PB数据窗口提供了...
首先,我们需要了解 Scala 语言,它是面向对象和函数式编程的结合,被广泛用于构建大规模数据处理应用。在 Spark 中,Scala 提供了简洁且高效的 API 来操作数据。 Spark Streaming 支持 DStream(Discretized ...
Spark2官方示例源代码提供了丰富的实例,帮助开发者更好地理解和使用Spark进行数据处理任务。这些示例涵盖了多种常见的数据处理场景,如文本分析、数据库交互、Parquet文件操作以及JSON数据处理等。 一、WordCount ...
尽管这个示例可能省略了错误处理和其他复杂功能,但它展示了基本的连接和数据传输机制。 在创建Mina客户端时,通常需要以下步骤: 1. **导入依赖**:首先,确保在项目中包含了Apache Mina的库。这可以通过Maven或...