天天看点

Groovy Tip 23 魔幻数组 三

                          Groovy Tip 23 魔幻数组 三

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

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

def

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

def

list12 = ['a','b','a','e']

println

list11.

intersect

(list12)

运行结果为:

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

当然,我们也可以用数组来模拟严格意义上的集合(没有相同的元素),即Java语言的Set对象。比如我们将上面的list11和list12对象做“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", "b", "c", "d", "a", "b", "a", "e"]

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

def

list16 = list11.unique()

def

list17 = list12.unique()

def

list18 = (list16+list17).unique()

println

list18

结果为:

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

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

def

list16 = list11.unique()

def

list17 = list12.unique()

def

list19 = list16-list17

println

list19

结果为:

["c", "d"]

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

def

list20 = ['a','a','b','b','c','e','e']

def

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

println

list20-list21

结果为:

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

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

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

def

list22 = ['a','b','c','d','e','f']

println

list22.

reverse

()

结果为:

["f", "e", "d", "c", "b", "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"]