<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    First they ignore you
    then they ridicule you
    then they fight you
    then you win
        -- Mahatma Gandhi
    Chinese => English     英文 => 中文             
    隨筆-221  評論-1047  文章-0  trackbacks-0
    將對象組織到像列表和映射這樣的數據結構中是一項基本的編碼任務。像大多數語言一樣,Groovy 定義了一個豐富的庫以管理這些類型的集合。

    列表

    創建一個列表與在 Java 語言中創建一個數組很類似。

    collect = ['groovy', 29, 'Hello', 'Groovy']

    empty=[]
    assert empty.size() == 0
    //添加元素
    empty.add 1
    assert empty.size() == 2

    在上面的例子里,列表 collect 的第二項自動裝箱為一個 Integer 類型。此外“[]”表示一個空列表,這個例子還演示了如何向列表中添加元素。

    Groovy 還為集合增加了幾個新方法,這些方法使得對列表的一些操作變得更加容易,如統計值出現的次數、將整個列表結合到一起、對列表排序等等。可以在例2 中看到這些集合方法的使用。

    collect = [5, 9, 2, 2, 4, 5, 6] 
    println collect.join(' - ') // prints 5 - 9 - 2 - 2 - 4 - 5 - 6
    println collect.count(2) // prints 2
    println collect.sort() // prints [2, 2, 4, 5, 5, 6, 9]

    Maps

    像列表一樣,映射也是一種在 Groovy 中非常容易處理的數據結構。例 3 中的映射包含兩個對象,鍵是 name 和 date。注意可以用不同的方式取得值。 可以用“[:]”創造一個空的映射。

    myMap = ["name" : "Groovy", "date" : new Date()]
    println myMap["date"]
    println myMap.date

    Map可以象beans一樣操作,但key值(類似屬性名)必須為有效的String標識。下面的例子詳細演示了Map的用法。

    map = ["name":"Gromit", "likes":"cheese", "id":1234]
    assert map.name == "Gromit"
    assert map.id == 1234
    //Create an empty maps
    emptyMap = [:]
    assert emptyMap.size() == 0
    emptyMap.foo = 5
    assert emptyMap.size() == 1
    assert emptyMap.foo == 5
    emptyMap.put("bar",6)
    assert emptyMap.get("bar") == 6

    players = ['baseball':'Albert Pujols', 'golf':'Tiger Woods']
    println players['golf'] // prints Tiger Woods
    println players.golf // prints Tiger Woods
    for (player in players)
    {
    println "${player.value} plays ${player.key}"
    }
    // This has the same result as the previous loop.
    players.each {
    player |println "${player.value} plays ${player.key}"
    }

    范圍

    范圍(Range)是Groovy的一大亮點Range允許創建連續值的列表。范圍是一個很直觀的概念,并且容易理解,利用它可以包含地或者排除地創建一 組有序值。使用“..”的Range是包括兩個邊界,使用“..<”(Groovy Beta3使用 “...”)的Range只包括開始邊界,而不包括結束邊界。

    而且由于Range擴展java.util.List,所以Range可以作為List使用。

    myRange = 29..<32
    myInclusiveRange = 2..5
    println myRange.size() // prints 3
    println myRange[0] // prints 29
    println myRange.contains(32) //prints false
    println myInclusiveRange.contains(5) //prints true

    // an inclusive range and operations
    range = 'a'..'d'
    assert range.size() == 4
    assert range.get(2) == 'c'
    assert range instanceof java.util.List
    assert range.contains('a')
    assert range.contains('d')
    assert ! range.contains('e')

    迭代器

    迭代是各種編程環境中最常見、最有用的技術。迭代器可以讓您迅速地訪問任何集合或容器中的數據,每次一個數據。Groovy 把迭代器變成隱含的,使用起來更簡單,從而改善了 Java 語言的迭代器概念。

    我們可以直接在集合上使用類似迭代器的方法。而且, Groovy 的迭代器方法接受閉包,每個迭代中都會調用閉包。

    class IteratorExample1{
    static void main(args) {
    coll = ["JMS", "EJB", "JMX"]
    coll.each{ item | println item }
    }
    }

    范圍可以用于循環遍歷。例如,將 rang 定義為一個排除范圍,循環打印 a、b、c 和 d。

    aRange = 'a'..<'e'
    for (i in aRange){
    println i
    }

    集合的其他功能

    如果不熟悉 Python 和其他腳本語言,那么您在 Groovy 集合中發現的一些其他功能會讓您印象深刻。例如,創建了集合后,可以用負數在列表中反向計數:

    aList = ['python', 'ruby', 'groovy']
    println aList[-1] // prints groovy
    println aList[-3] // prints python

    Groovy 還讓您可以用范圍分割列表。分割可獲得列表的準確子集:

    fullName = "Andrew James Glover"
    mName = fullName[7..<13]
    println "middle name: " + mName // prints James

    Ruby的語法

    集合類似于 Ruby如果愿意的話,還可以將 Groovy 集合作為 Ruby 集合。可以用類似 Ruby 的語法,以 << 語法附加元素、用 + 串接和用 - 對集合取差,甚至還可以用 * 語法處理集合的重復。 注意,還可以用 == 比較集合。

    collec = [1, 2, 3, 4, 5]
    collec << 6 //appended 6 to collec

    acol = ['a','b','c'] * 3 //acol now has 9 elements
    coll = [10, 11]
    coll2 = [12, 13]
    coll3 = coll + coll2 //10,11,12,13
    difCol = [1,2,3] - [1,2] //difCol is 3
    assert [1, 2, 3] == [1, 2, 3] //true

    集合的索引

    可以在字符串、Lists、Maps...中使用下標進行索引

    text = "nice cheese gromit!"
    x = text[2]
    assert x == "c"
    assert x.class == String

    sub = text[5..10]
    assert sub == 'cheese'

    map = ["name":"Gromit", "likes":"cheese", "id":1234]
    assert map['name'] == "Gromit"

    list = [10, 11, 12]
    answer = list[2]
    assert answer == 12
    list = 100..200
    sub = list[1, 3, 20..25, 33]
    assert sub == [101, 103, 120, 121, 122, 123, 124, 125, 133]

    可以使用下標操作符更新項目:

    list = ["a", "b", "c"]
    list[2] = "d"
    list[0] = list[1]
    list[3] = 5
    assert list == ["b", "b", "d", 5]

    可以使用負索引從最后開始計數:

    text = "nice cheese gromit!"
    x = text[-1]
    assert x == "!"
    name = text[-7..-2]
    assert name == "gromit"

    也可以使用向后范圍(開始索引大于結束索引),返回的結果是反轉的

    text = "nice cheese gromit!"
    name = text[3..1]
    assert name == "eci"

    // 山風小子注:closure中的‘分隔符’應該為 -> 而不是|,后者已經被廢棄。

    原文地址:http://blogger.org.cn/blog/more.asp?name=lhwork&id=20812
    附:
    Groovy與Grails同甘共苦,苦盡甘來
    posted on 2007-04-22 22:24 山風小子 閱讀(1878) 評論(0)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 免费无码AV一区二区| 亚洲色大18成人网站WWW在线播放| 无人视频免费观看免费视频| 全免费一级毛片在线播放| 亚洲制服丝袜第一页| 噼里啪啦电影在线观看免费高清 | 亚洲国产综合无码一区二区二三区| 亚洲精品天堂成人片AV在线播放 | 亚洲精品人成网线在线播放va| 免费可以在线看A∨网站| 亚洲乱妇老熟女爽到高潮的片| 热99re久久免费视精品频软件| 色欲色欲天天天www亚洲伊| 在线免费观看国产视频| 黄色网址免费在线| 亚洲中文字幕在线观看| 免费网站看av片| 亚洲图片中文字幕| 日本不卡在线观看免费v| 成人国产网站v片免费观看| 中文字幕亚洲专区| 亚洲综合免费视频| 亚洲日本在线电影| 国产国拍亚洲精品福利 | 亚洲欧美日本韩国| 久久久久亚洲av毛片大| 91青青青国产在观免费影视| 亚洲人成色777777精品| 国产亚洲?V无码?V男人的天堂| 久久久久久久岛国免费播放 | 在线免费观看伊人三级电影| 亚洲视频在线观看视频| 在线日韩av永久免费观看| 国产免费牲交视频免费播放| 亚洲区精品久久一区二区三区| 吃奶摸下高潮60分钟免费视频 | 免费做爰猛烈吃奶摸视频在线观看| 国产成人人综合亚洲欧美丁香花| 亚洲色精品aⅴ一区区三区| 免费A级毛片无码无遮挡内射| 欧洲精品码一区二区三区免费看|