2010-10-25 34 views
23

Tôi đang sử dụng MarkupBuilder tiện dụng của Groovy để xây dựng một trang HTML từ nhiều nguồn dữ liệu khác nhau.Phát hiện mục đầu tiên và cuối cùng bên trong Groovy mỗi {} đóng

Một điều tôi đang cố gắng làm một cách độc đáo là xây dựng một bảng HTML và áp dụng các lớp kiểu khác nhau cho các hàng đầu tiên và cuối cùng. Đây có lẽ là minh họa tốt nhất với một ví dụ ...

table() { 
    thead() { 
    tr(){ 
     th('class':'l name', 'name') 
     th('class':'type', 'type') 
     th('description') 
    } 
    } 
    tbody() { 
    // Add a row to the table for each item in myList 
    myList.each { 
     tr('class' : '????????') { 
     td('class':'l name', it.name) 
     td('class':'type', it.type) 
     td(it.description) 
     } 
    } 
    } 
} 

Trong phần <tbody>, tôi muốn thiết lập các lớp học của phần tử <tr> là một cái gì đó khác nhau tùy thuộc xem các mục hiện tại myList là lần đầu tiên hoặc Mục cuối cùng.

Có cách thức Groovy-ified hay không để thực hiện việc này mà không cần sử dụng hướng dẫn sử dụng để kiểm tra các chỉ mục mục theo kích thước danh sách bằng cách sử dụng một cái gì đó như eachWithIndex{}?

Trả lời

43

Bạn có thể sử dụng

if(it == myList.first()) { 
    // First element 
} 

if(it == myList.last()) { 
    // Last element 
} 
+0

đẹp tip, không biết về các phương pháp đó. – xlson

+0

Hữu ích, cảm ơn. Như trên, đã không thấy những phương pháp đó trước đây ... – tomtheguvnor

+3

Chỉ cần nhớ rằng, đầu tiên() và cuối cùng() chỉ hoạt động trên Danh sách, không phải Bản đồ hoặc Tập hợp (theo http://groovy.codehaus.org/groovy-jdk /) – sbglasius

1

if (it.after.value! = Null) { ...... }

trình cho các bản đồ

10

Câu trả lời được cung cấp bởi sbglasius có thể dẫn đến kết quả không chính xác như khi danh sách chứa các phần tử dự phòng nên một phần tử từ bên trong danh sách có thể bằng với phần tử cuối cùng.

Tôi không chắc chắn nếu sbglasius có thể sử dụng is() thay vì == nhưng một câu trả lời đúng có thể là:

myList.eachWithIndex{ elt, i -> 
    if(i == 0) { 
    // First element 
    } 

    if(i == myList.size()-1) { 
    // Last element 
    } 
} 
+0

Cảm ơn bạn vì eachWithIndex :) thật tuyệt – Elaine

Các vấn đề liên quan