NSSetとライフゲーム(その1) [プログラミング - NSSetとライフゲーム]
MacOSXのFoundation frameworkにはNSSetというクラスがあって、これがまた面白かったのでメモを残しておく。
NSSet(とNSMutableSet、NSCountedSet)は数学の集合の概念を実装したもので、実際に集合演算に対応するメソッドが含まれている。JavaにもSetというクラスがあるが、これとほぼ同じもの(パクリらしいけど)。
NSSetのメソッドのうち
unionSet:(NSMutableSet)合併集合をとる
minusSet:(NSMutableSet)差集合をとる
intersectSet:(NSMutableSet)共通集合をとる
anyObject(NSSet)集合が空でないかどうか調べる
isSubsetOfSet:(NSSet)部分集合であるかどうか調べる
isEqualToSet:(NSSet)集合として同一かどうか調べる
member:(NSSet)要素に含んでいるかどうか調べる
set(NSSet)空集合を返す
count(NSSet)要素の数を返す
などは集合演算そのまんま。
要素にNSSetを含めることもできるから、集合の集合、なども表せる。
NSArray(配列)と違うところはNSSetの要素には「順番に意味が無い」ことと「重複が無い」ということがポイント。
ある要素が含まれているかどうかを調べるときNSSetとNSArrayでは探し方が違うのでスピードが違う、とreferenceに書いてある。
NSSetでは要素の重複はないが、重複を許す場合NSCountedSetを使う。これはNSMutableSetを継承しているのではじめからMutableである。countForObject:である要素がいくつ含まれているかを調べることができる。NSCountedSetはいわゆるbagである、とreferenceに書いてある。ナップサック問題(Wikipedia)の実装にはNSCountedSetが使えるよ、ということ。
こんなの僕の若い頃には無かった。20年前のコレクションクラスといえば配列、それと2次元配列...以上、だった。今の若い人はいいねえ、こんな面白いおもちゃがあって。
これを使って、最短ではないが最も簡単でかつ特徴ある実装を目指してConwayのライフゲームの実装をしてみよう、と思う。
字ばっかりなので続きはまたこんど。
コメント 0