SSブログ

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のライフゲームの実装をしてみよう、と思う。
字ばっかりなので続きはまたこんど。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。