Groovy入門(三)——集合類型List

List


groovy中的List結合了Java中數組和List的優勢,既可以用下標的形式來訪問數組中的元素,而且可以動態擴展數組,相當方便!

聲明List

List有以下三種聲明方式

  1. myList =[1,2,3]
  2. myList = new ArrayList() 或者 mylinkList = new Linklist(myList);
  3. 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()
發佈了61 篇原創文章 · 獲贊 14 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章