Groovy入门(三)——集合类型List
groovy中的List结合了Java中数组和List的优势,既可以用下标的形式来访问数组中的元素,而且可以动态扩展数组,相当方便!
声明List
List有以下三种声明方式
- myList =[1,2,3]
- myList = new ArrayList() 或者 mylinkList = new Linklist(myList);
- longList = (0..100).toList()
List可以像普通数组那样通过下标来访问:
myList = ["a","b","c","d","e","f"]
assert myList[0] == "a"
assert myList[1..3]==["b","c","d"]
assert myList[1,3,5]==["b","d","f"]
//remove element d to e
myList[3..5] =[]
//反向遍历
assert myList[4..0] =["e","d","c","b","a"]
//负数代表从后往前遍历 -1表示最后一个元素
assert myList[-1]=["f"]
其他运算符:
myList = []
//append a element plus(Object)
myList+="a"
assert myList == ["a"]
myList+=["b","c"]
//plus(Collection)
assert myList == ["a","b","c"]
myList = []
//leftShit is like append
myList << "a"<<"b"
//minu(Collection)
assert myList -["b"] == ["a"]
//multiply
assert myList*2 == ["a","b","a","b"]
控制结构
groovy中的控制结构和Java也非常相似, for循环的结构则跟Python相似
myList =["a","b","c"]
assert myList.isCase("a")
candidate ="a"
switch(candidate){
case myList:
assert true;
break
default:
assert false
}
//intersection filter 取交集
assert ["x","a","z"].grep(myList) ==["a"]
myList = []
//null List is considered false in if statement
if(myList)
assert false
//for 循环迭代List
str =""
for(i in [1,"x",5]){
str += i
}
assert str == "1x5"
List主要方法
assert [1,[2,3]].flatten() == [1,2,3]
assert [1,2,3].intersect([4,3,1])==[3,1]
assert [1,2,3].disjoint([4,5,6])
//当做stack来使用
list = [1,2,3]
popped = list.pop()
assert popped == 3
assert list == [1,2]
list.push(3) //等价于"<<"操作符
assert list ==[1,2,3]
assert [1,2].reverse() ==[2,1]
assert [3,1,2].sort() == [1,2,3]
def list =[[1,0],[0,1,2]]
// compare by first element
list = list.sort{a,b->
//<==> 等价于compare方法
a[0]<=>b[0]
}
assert list == [[0,1,2],[1,0]]
//compare by size
list = list.sort{item-> item.size()}
assert list ==[[1,0],[0,1,2]]
list = ["a","b","c"]
// remove by index
list.remove(2)
assert list ==["a","b"]
// remove by value
list.remove(b)
assert list == ["a"]
list = ["a","b","b","c"]
list.removeAll(["b","c"])
assert list ==["a"]
//tranform list to another
def doubled = [1,2,3].collect{item->item*2}
assert doubled == [2,4,6]
find every element matching the closure
def odd = [1,2,3].findAll{item->item%2==1}
assert odd ==[1,3]
//Remove duplicate elements
def x = [1,1,1]
assert [1] == new HashSet(x).toList()
assert [1] == x.unique()
//Remove null elements
def x = [1,null,1]
assert [1,1] == x.findAll{it!=null}
assert [1,1] == x.grep{it}
def list = [1,2,3]
assert list.count(2) ==1
assert list.max() == 3
assert list.min() == 1
def even = list.find{item->item%2==0}
assert even ==2
assert list.every{item->item<5}
assert list.any{item->item<2}
def store =""
list.reverseEach{item->store+=item}
assert store == "321"
assert list.join("-") == "1-2-3"
result = list.inject(0){
clinks,guests->clinks+=guests}
assert result == 0+1+2+3
assert list.sun() == 6
List实战——快速排序
def quickSort(list){
if(list.size() <2)
return list
def pivot = list[list.size().intdiv(2)]
def left = list.findAll{item->item<pivot}
def middle = list.findAll {item->item==pivot}
def right = list.findAll{item->item>pivot}
return (quickSort(left)+middle+quickSort(right))
}
assert quickSort([]) == []
assert quickSort([1]) == [1]
assert quickSort([1,2]) == [1,2]
assert quickSort([2,1,3]) == [1,2,3]
assert quickSort([1.0f,"a",10,null]) == [null,1.0f,10,"a"]
assert quickSort("Karin and Dierk") == " DKaadeiiknnrr".toList()
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Groovy中map和数组的基本使用
- 下一篇: Groovy脚本基础全攻略