groovy tip 26魔幻陣列 六
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
list還有一些統計學上面的運算,也是我們可能要經常用到的。比如,將集合裡的元素求和、求集合裡的最大、最小元素等等。
比如我們有如下的乙個集合物件:
deflist = [1,
3,4,
5,6]
有些時候,我們希望把list裡所有元素相加起來,這時候,groovy語言為我們提供了「sum」方法,示例**如下:
printlnlist.sum()
結果為: 19
當然了,「sum」方法要提供的功能不止是簡單的求和,而且還可以做更為複雜的求和。比如,我們有如下要求:先把集合裡為偶數的元素除以2,再求和。那麼**就是如下的樣子:
printlnlist.sum
結果為: 14
求取集合的最大、最小元素的方法是「max」和「min」方法,還是以上面的list物件為例子。
printlnlist.max()
printlnlist.min()
執行結果為: 6
1 同樣的,方法「max」和「min」也不是簡單意見上的求取最大、最小元素,當他們以閉包作為輸入引數以後,就可以做很多廣義上的求最大、最小元素了。
比如,我們現在希望把上面的list的每乙個元素求負以後再找出最大的元素:
printlnlist.max
結果為: 1
當然了,上面的例子可能沒有太大的實際意義。下面,我們來看乙個有一點點實際意義的例子。比如我們有如下的乙個集合物件:
deflist1 = [
'hello'
,'wallace'
,'world'
,'armstrong'
]我們希望找出字串長度最大的那個元素:
printlnlist1.max
結果為:
armstrong
最後,還有乙個集合類的運算方法需要提出來,這個方法比較難以理解一些,所以把它放在最後,作為我們整個《魔幻陣列》系列的結尾。這個方法就是「inject」方法。首先,我們還是來看乙個簡單的例子:
deflist2 = [1,
4,5,
7]printlnlist2.inject(0)
這個方法很不好理解,它的意思是輸入乙個值,如上面的「0」到乙個迴圈的第一次迴圈中去,如上例中,將「0」傳給「count」變數,然後將運算的結果,如「
count+it
」的結果傳遞給第二次迴圈,即傳遞給第二次迴圈的「count」變數,然後再運算「
count+it
」,再把結果傳遞給第三次迴圈,依此類推。
上面**的結果為: 17
上面的**等同於下面的**:
intcount=
0list2.each
printlncount
可以看到,上面的**就比「inject」方法好理解多了,而且**量也沒有增加多少,可以預見,我們在groovy語言的使用過程中會很少使用到該方法。但是,我們仍然要學會這個方法,先不說在某些特殊情況下,這個方法會很好用。最要的是,當我們在閱讀一些開源**的時候,遇到這個方法不會迷惑。
Groovy Tip 26 魔幻陣列 六
groovy tip 26魔幻陣列 六 list 還有一些統計學上面的運算,也是我們可能要經常用到的。比如,將集合裡的元素求和 求集合裡的最大 最小元素等等。比如我們有如下的乙個集合物件 deflist 1,3,4,5,6 有些時候,我們希望把 list 裡所有元素相加起來,這時候,groovy 語...
Groovy Tip 25 魔幻陣列 五
groovy tip 25魔幻陣列 五 本系列前面章節曾談到過陣列來模擬數學集合的一些操作,比如 交集 並集 集合求差 和 集合反轉 等,都是集合的一些基本運算。但是,除此之外,還有一些集合的基本運算,如 屬於 子集 等以及與它們的相關運算,卻沒有提及,因此在本節來一一談到。首先說 屬於 運算,我們...
Groovy Tip 29 正規表示式 三
groovy tip 29 正規表示式 三 本篇主要來談談 捕獲組 和 非匹配組 以及與它們相關聯的一些概念。捕獲組 應該來說是乙個很重要的特性,特別是在進行文書處理的時候。比如,我們經常會遇到一些文字或數字跟一些符號混合在一起,而我們需要把這些文字或數字從這些符號中分離出來。這時候,我們就可以用到...