Groovy Tip 12 Range的用法
Groovy语言的Range的用法值得一说,因此还是把它单独提出来说一说。Range作为Groovy语言的一种数据类型,其实非常简单。Range类型数据的标志是“
..”,形式如下:
def
range =
1
..
10
Range类型和集合类型一样,可以使用那些使用于集合对象的通用方法,如“each”、“find”、“any”和“every”等方法。如:
range.
each
{
print
"${it} "
}
上面的代码的打印结果为:
1 2 3 4 5 6 7 8 9 10
可以看到“
..
”符号所表示范围包括了首尾,如果不包括尾部,可以编码如下:
def
range =
1
..<
10
range.
each
{
print
"${it} "
}
结果为:
1 2 3 4 5 6 7 8 9
除了那些使用于集合类的通用方法,还有如下的一些方法,如:
def
range =
1
..
10
println
range.contains(
5
)
println
range.
size
()
println
range.from
println
range.to
结果为:
true
10
1
10
除了数字可以组织
Range
类型,还有其他一些数据也可以组织
Range
类型,如:
(
'a'
..
'r'
).
each
{
print
"${it},"
}
结果为:
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,
一般来说,集合类对象我们都直接使用
each
方法,但有时候
each
方法也完全好用,请看下面的例子:
def
list = [
3
,
45
,
2
,
34
,
8
,
98
,
76
]
(
0
..<list.
size
()-
1
).
each
{
i ->
(i+
1
..<list.
size
()).
each
{
j ->
if
(list[i]>list[j])
{
def
num = list[i]
list[i] = list[j]
list[j] = num
}
}
}
println
list
对于上面的例子,如果你想直接对
list
对象使用
each
方法,就不好实现了。结果为:
[2, 3, 8, 34, 45, 76, 98]