Groovy Tip 23 魔幻数组 三
数组可以说是一个广义的集合,它也可以做交集、并集等运算。
先从求交集说起,下面就是一个求交集的例子:
def list11 = ['a','a','b','c','d']
def list12 = ['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","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"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。