【问题标题】:How to store linear range of values? Which Data structure to choose?如何存储值的线性范围?选择哪种数据结构?
【发布时间】:2009-08-13 12:18:58
【问题描述】:

我需要一个简单的结构来存储基于边的多边形名称......例如1 边是“monogon”,2 边是“digon”,3 边是“三角形”,依此类推(最多 12 边) 存储这些并在代码中动态重用它们的最简单方法是什么?例如如果我的 polygonShape 类的边数为 3,它应该返回“Triangle”作为名称(这是在类中声明的属性)(我使用的是 Obj-c)。我想到了3个选项

1。枚举

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

但后来意识到这与我需要的相反。他们实际上会将我的数字编码为字符串。我需要从数字中获取名称。

2。 switch-case 语句 - 作为接近的选择

3。数组 - 然后我想可能是使用数组,它们的索引映射到字符串

不知何故,我觉得我可能在数组的“过于简单而不真实”的解决方案中遗漏了一些东西。 任何意见表示赞赏。

【问题讨论】:

标签: objective-c data-structures enums switch-statement


【解决方案1】:

我认为数组将是要走的路。唯一要注意的是,数组从 0 开始,因此您必须在索引零中存储类似空字符串的内容,或者始终从边数中减去 1 以获得正确的索引。您不能将 nil 存储在索引零中,因为它用于标记数组的结尾。另一种方法可能是 NSDictionary ,因此您不必处理索引零。您只需将 NSStrings 1 - x 作为您的键,然后将 mongon, digon, triangle,... 的 NSStrings 作为您在数组中的对象。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我建议使用哈希表(或哈希映射)或您的语言中的等效项。它们适用于键/值对。 :)。

    您的数组解决方案似乎也足够好,如果您确定从零开始按顺序使用整数(在您的情况下,这会导致每个奇怪的“zerogon”或 (i-1)从数组中获取名称的时间)。哈希建议是更通用的建议。

    所以分析两者:

    哈希表:

    • 更笼统
    • 您只存储您将使用的值
    • 占用更多内存

    数组:

    • 可能适合您的具体情况
    • 数组中包含奇怪的“zerogon”,或者 (i-1),因为数组是从零开始的
    • 占用的内存更少(仅适用于字符串,不适用于整数)

    【讨论】:

    • yup ...虽然我想添加 Hashtables 也可以以比 NSMutableArray 更简洁的方式动态扩展,但我也在寻找更简单的结构(速度和维护)
    【解决方案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 的希腊语前缀。

    是的,零边的多边形是 angon :)

    【讨论】:

      【解决方案4】:

      在这些情况下要记住的另一件事是,您还可以将键/值对存储在应用程序包中的 plist 中,并在需要时加载它们。这样可以更轻松地维护大量项目并将字符串本地化为不同的语言。

      【讨论】:

        猜你喜欢
        • 2012-05-15
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 2013-11-12
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多