Groovy:检测列表中重复的非连续值的最简单方法
发布时间:2020-12-14 16:31:35 所属栏目:大数据 来源:网络整理
导读:我知道在Groovy中, 如果 list = [1,2,3,1] 什么时候 list.unique() 带着回归 [1,3] 但是,如果我想检测列表中重复,非连续项目的重复值.我怎样才能做到这一点? detect([1,1]) = truedetect([1,2]) = truedetect([1,1,3]) = falsedetect([1,4]) = false 谢谢.
我知道在Groovy中,
如果 list = [1,2,3,1] 什么时候 list.unique() 带着回归 [1,3] 但是,如果我想检测列表中重复,非连续项目的重复值.我怎样才能做到这一点? detect([1,1]) => true detect([1,2]) => true detect([1,1,3]) => false detect([1,4]) => false 谢谢. 编辑: detect([1,1]) => true true表示发生任何非连续的重复. 解决方法
你应该能够metaClass列表并添加自己的检测方法,如下所示:
List.metaClass.detect = { def rslt = delegate.inject([]){ ret,elem -> ret << (ret && ret.last() != elem ? elem : !ret ? elem : 'Dup') } return (!rslt.contains('Dup') && rslt != rslt.unique(false)) } assert [1,1].detect() == true //Non-consecutive Dups 1 assert [1,2].detect() == true //Non-consecutive Dups 2 assert [1,3].detect() == false //Consecutive Dups 1 assert [1,3].detect() == false //Consecutive Dups 2 and 3 assert [1,4].detect() == false //Unique no dups (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |