読者です 読者をやめる 読者になる 読者になる

No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

Groovyのコレクションフレームワークで集合演算

ほんの断片ですが、メモとして。
(動作確認: Groovy Version: 1.5.7 JVM: 1.6.0_10)

// #groupBy (指定条件でグルーピング)
assert [ // ↓ ↓ 3と4でグルーピング
      [1, 2, 3, 4],
      [2, 2, 3, 4],
      [3, 5, 3, 4],
      [6, 3, 3, 4],
].groupBy{ it[2, 3] } == [[3, 4]:[[1, 2, 3, 4], [2, 2, 3, 4], [3, 5, 3, 4], [6, 3, 3, 4]]]

def list1 = [1, 2, 3]
def list2 = [4, 5, 6]
def list3 = [3, 7, 8]

// #disjoint(互いに素かどうか)
assert  list1.disjoint(list2) // ダブりなし
assert !list1.disjoint(list3) // 3がダブる

// #intersect(ダブった部分を抽出)
assert  [] == list1.intersect(list2) // ダブりなし
assert [3] == list1.intersect(list3) // 3がダブル

// #combinations(リストの組み合わせ)
assert [[1, 2, 3], [4, 5, 6]].combinations() == [[1, 4], [2, 4], [3, 4], [1, 5], [2, 5], [3, 5], [1, 6], [2, 6], [3, 6]]

// #transpose(リストの入れ替え)
assert [[1, 2, 3], [4, 5, 6]].transpose() == [[1, 4], [2, 5], [3, 6]]