加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy Tip 23 魔幻数组 三

发布时间:2020-12-14 16:58:50 所属栏目:大数据 来源:网络整理
导读:????????????????????????? Groovy Tip 23 魔幻数组 三 ? ? 数组可以说是一个广义的集合,它也可以做交集、并集等运算。 先从求交集说起,下面就是一个求交集的例子: ? ? ??? ? def list11 = [ 'a' , 'a' , 'b' , 'c' , 'd' ] ??? ? ??? ? def list12 = [ '

????????????????????????? Groovy Tip 23 魔幻数组

?

?

数组可以说是一个广义的集合,它也可以做交集、并集等运算。

先从求交集说起,下面就是一个求交集的例子:

?

?

??? ? def list11 = ['a','a','b','c','d']

??? ?

??? ? def list12 = ['a','e']

??? ?

??? ? println list11.intersect(list12)

??? ?

?

?

运行结果为:

["a","b","a"]

?

当然,我们也可以用数组来模拟严格意义上的集合(没有相同的元素),即Java语言的Set对象。比如我们将上面的list11list12对象做“unique”运算,就得到了两个真正的集合对象,然后再将它们做“intersect”运算,就得到了它们的交集。

?

??? ? def list13 = list11.unique()

??? ? def list14 = list12.unique()

??? ?

??? ? println list13.intersect(list14)

??? ?

?

?

结果为:

["a","b"]

?

接着说说求并集。求并集在Groovy语言中就是两个数组相加,如下:

?

??? ? def list15 = list11+list12

??? ?

??? ? println list15

?

?

结果为:

["a","a","c","d","e"]

?

当然,如果是要模拟严格意义上的集合求并集运算,其数组解决方法如下:

?

??? ? def list16 = list11.unique()

??? ? def list17 = list12.unique()

??? ?

??? ? def list18 = (list16+list17).unique()

??? ?

??? ? println list18

?

?

结果为:

["a","e"]

?

?

求在A集合而不在B集合的元素,即集合的求差运算。如下:

?

??? ? def list16 = list11.unique()

??? ? def list17 = list12.unique()

??? ?

??? ? def list19 = list16-list17

??? ?

??? ? println list19

??? ?

?

?

结果为:

["c","d"]

?

当然,上面是严格意义上的集合求差运算,如果只是两个数组相减的话,结果又是什么样呢?

?

?

??? ? def list20 = ['a','e','e']

??? ?

??? ? def list21 = ['a','b']

??? ?

??? ? println list20-list21

?

?

结果为:

["c","e","e"]

?

对于结果一看,我们就知道是怎么回事了,无需我多说。

?

集合还有一种运算就反转,即将集合的第一个元素和最后一个元素的位置互换,如此类推。我们来看它的实现:

?

??? ? def list22 = ['a','d','f']

??? ?

??? ? println list22.reverse()

?

结果为:

["f","a"]

?

当然,除了“reverse”方法,还有一个“reverseEach”方法,也是相当有趣的。比如我们有了如下的一个数组:

?

??? ?

??? ? def list23 = ['Tom Cheng','Mike Wang','Jack Deng']

?

?

我们需要求得如下要求的一个数组:先是将list23的元素反转过来,然后再取数组中各个元素的名字,即“Tom”等组成一个新的数组。

?

?

??? ? def list24 = []

??? ?

??? ? list23.reverseEach{

?????? ? def names = it.split(' ')

?????? ? list24 << names[0]

??? ? }

??? ?

??? ? println list24

?

?

结果为:

["Jack","Mike","Tom"]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读