Groovy高効率プログラミング——「短剣の使い方」の使用


Groovy高効率プログラミング——「短剣の使い方」の使用
Grouvyは多くの「短剣」(短剣、短気精悍も~each、each WithIndex、any、every、grep、join、sort、find、findAll、collect、groupBy、inject、reverse、tokenize、unique、max、min、count、などの開発者の効率を向上させています。このエッセイで各方法の使い方を披露します。
each
遍歴リスト
def list = ['a', 'b', 'c']
list.each { elem ->
println elem
}
運転結果:abc
mapを巡回
def map = [name:"    ", address:"Shanghai"]
map.each { key, value ->
println "$key : $value"
}
実行結果:
name:山風小僧address:Shanghai
each WithIndex
index付のeach
def list = ['a', 'b', 'c']
list.eachWithIndex { elem, i ->
println "$i : $elem"
}
運転結果:0:a 1:b 2:c
any
条件が満たされている限り(この例の条件はelem.length()<3)のelementはtrueに戻ります。そうでなければfalseに戻ります。
def list = ['a', 'ab', 'abc']
list.any { elem ->
elem.length() < 3
}
運転結果:true
every
すべてのelementは条件を満たしています。trueに戻ります。そうしないとfalseに戻ります。
def list = ['a', 'ab', 'abc']
list.every { elem ->
elem.length() < 3
}
運転結果:false
grep
条件に合ったelementは抽出され、リストとなります。
条件はクローズアップで伝えられます。
def list = ['a', 'ab', 'abc']
list.grep { elem ->
elem.length() < 3
}
運転結果:["a"ab"
条件はregexとして伝えられ、regexに該当するelementが抽出されてリストを形成する。
def list = ['a', 'ab', 'abc']
list.grep(~/../)
運転結果:[[ab]]
条件はcollectionとして伝えられ、collectionにおけるelementが抽出されて一つのlistを形成し、二つのcollectionの交差を求めるものと見なすことができる。
def list = ['a', 'ab', 'abc']
list.grep(['a', 'cde', 'ab'])
運転結果:["a"ab"
ジョン
collectionのelementを指定された文字で接続します。
def list = [2007, 8, 26]
list.join('-')
運転結果:2007-8-26
ソフト
指定された条件に従って並べ替えを行います。
def list = [2007, 8, 26]
list.sort { e1, e2 ->
return e1 - e2
}
運転結果:[8,26,2007]
find
collectionで条件を満たす「最初の」elementを検索します。
def list = [2007, 8, 26]
list.find { elem ->
elem <30
}
運転結果:8
findAll
collectionで条件を満たす「すべて」elementを検索します。
def list = [2007, 8, 26]
list.findAll { elem ->
elem < 30
}
運転結果:[8,26]
collect
collectionのelementを処理して、新しいcollectionに処理結果を入れます。
def list = ['a', 'b', 'c']
list.collect { elem ->
elem * 2
}
運転結果:["aa],[bb],[cc]
mapを処理する
def map = [name:'    ', address:'Shanghai']
map.collect { entry ->
"${entry.key} : ${entry.value}"
}
運行結果:[name:山風小子,address:Shanghai]groupBy
コレクション内のelementを所定の条件でグループ化する。
def list = ['a', 'b', 'abc', 'ab', 'c', 'bc']
list.groupBy { elem ->
elem.length()
}
運転結果:[1]、[b]、[c],2:[ab],[bc],3:[abc]inject
累積プロセスは、INject方法の'I'をsumの初期値として導入し、collectionを巡回する過程で、処理結果('sum$elem')をsumに保存する。
def list = ["love", "you"]
list.inject('I') { sum, elem ->
"$sum $elem "
}
運転結果:I love  あなた
逆転セ
コレクションの中の各elementの順を逆にします。
def list = ['a', 'b', 'c']
list.reverse()
運転結果:["c"、"b"、"a"
文字列を逆さまにする
def list = 'abc'
list.reverse()
運転結果:cba
tokenize
区切り記号を指定して、tokenセットを取得します。
'a1/b2/c3/d4'.tokenize('/')
'a 1/b 2/c 3/d 4'.tokenize('/')の運転結果:[[a 1],[b 2],[c 3],[d 4]]
unique
コレクションで繰り返されるelementを除去します。
def list = ['a', 'b', 'b', 'a', 'c']
list.unique()
運転結果:["a"、"b"、"c"max]
最大値を求める
def list = [1, 2, 3]
list.max()
運転結果:3
指定された比較内容(この例の比較内容は長さlength)に従って、collectionの中で最大のelementを選択します。
def list = ['a', 'ab', 'abc']
list.max { elem ->
elem.length()
}
minとmaxは似ていますが、最小値を求めて、再び用法を実証しません。使い方はmaxと同じです。上記コードの中のmaxをminに変更すればいいです。
count
数をかぞえる
def list = ['a', 'ab', 'a']
list.count('a')
運転結果:2
文字列「aba」のaをカウントします。
def list = "aaba"
list.count('a')
運転結果:3
sum
和を乞う
def list = [1, 2, 3]
list.sum()
運転結果:6
文字列の「和」を求めて、つまり文字列を接続します。
def list = ['a', 'b', 'c']
list.sum()
運転結果:abc
最後に、私は各位に1時(点)を注意したいです:時にはあなたはstringをlistと見なすことができて、stringに対してlistの“短刀の方法”に適用します。