2009-08-13 27 views
0

我需要一個簡單的結構來存儲基於側面的多邊形名稱...因此例如一邊是「monogon」,兩邊是「digon」,三邊是「三角形」等(對於​​多達12邊) 什麼是最簡單的方式來存儲這些並動態地在代碼中重用它們?例如,如果我的polygonShape類的邊數爲3,它應該返回「Triangle」作爲名稱(這是在類中聲明的屬性)(我使用的是Obj-c)。我想到的3個選項

1枚舉如何存儲線性範圍值?選擇哪種數據結構?

typedef enum {monogon = 1, digon, triangle, ...} 

但後來意識到這是我所需要的相反。他們實際上會把我的數字編碼爲一個字符串。我需要從數字中獲得名字。

2.開關case語句 - 都更接近的替代

3.陣列 - 後來我想可能是使用數組和其指標映射到字符串

不知怎的,我覺得我可能會丟失在「too-東西數組簡單「的解決方案。 任何意見讚賞。

+0

「三角形」不應該是「三角形」嗎? :) – vit 2009-08-13 12:25:51

+0

是的,這是:) http://en.wikipedia.org/wiki/Polygon – Dev 2009-08-13 12:31:28

回答

3

我認爲一個數組將是要走的路。唯一的問題是,數組是從0開始的,所以你必須在索引0中存儲類似空字符串的東西,或者總是從你的數目減去1以獲得正確的索引。由於用於標記數組的末尾,因此不能將零存儲在索引零中。另一種方法可能是一個NSDictionary,所以你不必處理索引零。您只需將NSString 1 - x作爲您的鍵,然後將mongon,digon,triangle,...的NSString作爲數組中的對象。希望這可以幫助。

3

我會建議使用哈希表(或哈希映射),或在您的語言相當於。它們適用於鍵/值對。 :)。

你的陣列解決方案似乎也不錯,如果你確定你從零開始按順序使用整數(在你的情況下會導致奇怪的「零」或(i-1)爲每次你從數組中獲得名字)。哈希建議是一個更通用的建議。

所以,分析兩者:

哈希表:

  • 更一般
  • 你只存儲的值,你會用
  • 佔用更多的內存

陣列:

  • 可能適合於特定情況
  • 古怪「zerogon」包括在陣列中,或(i-1),因爲陣列從零開始
  • 佔用(僅用於字符串,而不是更少的內存對於整數)
+0

y ...我也在尋找一個更簡單的結構(速度和維護),雖然我想添加哈希表可以也可以用比NSMutableArray更乾淨的方式動態擴展 – Dev 2009-08-13 12:40:26

3

我覺得一個數組是在這種情況下,一個優雅的解決方案,假設你不需要爲多邊形的前綴與20多個方面:

NSArray *greekPrefixes = [[NSArray alloc] initWithObjects: 
@"an", @"mono", @"di", @"tri", @"tetra", @"penta", @"hexa", @"hepta", @"octa", 
@"ennea", @"deca", @"hendeca", @"dodeca", @"triskaideca", @"tetrakaideca", 
@"pentakaideca", @"hexakaideca", @"heptakaideca", @"octakaideca", 
@"enneakaideca", @"icosa", nil]; 

在指數i的字符串是希臘前綴號碼i

是的,用零個邊的多邊形是安貢:)

1

牢記在這些情況下的另一件事是,你還可以存儲鍵/值對中的plist在你的應用程序包,並在需要時加載它們。這可以更容易地維護大量項目並將字符串本地化爲不同的語言。