Ranges and Sets
11.1 Ranges
Ranges work on any type implementing Comparable + next()/previous() (custom ranges).
def r = 1..5 // IntRange (inclusive)
def ex = 1..<5 // 1,2,3,4
def lower = 1<..5 // 2..5 (Groovy 4)
def both = 1<..<5 // 2,3,4
def chars = 'a'..'e'
def rev = 5..1 // reversed range
def dates = (new Date() - 2)..new Date()
println r.size(), r.from, r.to, r.contains(3), 3 in r, r.toList(), r.reverse()
println r.step(2), (0..20).step(5).collect()
(1..3).each { print it }
println (1..10).findAll { it % 3 == 0 }
def slice = [10, 20, 30, 40, 50][1..3]
def text = "abcdef"[2..<4]
switch (score) { case 90..100: println "A"; break }11.2 Sets
def set = [1, 2, 2, 3] as Set // LinkedHashSet
def sorted = [3, 1, 2] as SortedSet // TreeSet
def hs = new HashSet([1, 2])
set << 4
set.addAll([5, 6])
println set.contains(2), set.intersect([2, 3, 9] as Set), set + [7], set - [1]
println set.sort(), set.collect { it * 2 }.toSet()
def immutableSet = Set.of(1, 2, 3)11.3 Arrays
int[] nums = [3, 1, 2]
def strArr = new String[3]
def matrix = new int[3][3]
println nums.length, nums.sort(), nums.toList(), nums.sum(), nums.max()
def javaStyle = new int[] {1, 2, 3} // Groovy 3+ supports Java array initializers