2
我有叉/聯接計算的示例。有人能否簡要介紹一下它在這裏的工作原理?叉/聯接計算
def quicksortForkJoin(numbers) {
withPool {
runForkJoin(0, numbers) {index, list ->
def groups = list.groupBy {it <=> list[list.size().intdiv(2)]}
if ((list.size() < 2) || (groups.size() == 1)) {
return [index: index, list: list.clone()]
}
(-1..1).each { forkOffChild(it, groups[it] ?: [])}
return [index: index, list: childrenResults.sort {it.index}.sum {it.list}]
}.list
}
}
非常感謝!但我仍然不明白帶有「groups」的部分:它是如何分成3組的?這一行'{它<=>列表[list.size()。intdiv(2)]}'是相當混亂。 – user1170330
@ user1170330'list [list.size()。intdiv(2)]'獲得「中間」元素,即:[[3,6,4,3,1]]它會給你數字'4' 。所以我們稱這個爲'mid'。組關閉然後變成'{它0123}'。宇宙飛船操作員基本上在兩個元素之間進行「比較」,並返回「-1」,「0」或「1」。因此,'groupBy'接受列表中的每個元素,並返回一個帶有3個鍵的映射(如此評論中的示例列表)[[-1:[3,3,1],0:[4],1 :[6]]' –