【问题标题】:Math logic to substitute if statement替换 if 语句的数学逻辑
【发布时间】:2014-07-30 16:27:33
【问题描述】:

下面的代码有效,但我试图提出一些数学逻辑并使用一些binary 运算符来代替这个if statement

NSInteger indexCor = 0;
    for (PFObject *object in self.objects) {
        if (object == custom) {
            if (indexCor < 2) {
                NSLog(@"rodou indexCor <=2.");
                [self.coresConjugadosDict setObject:self.uiColorsArray[0] forKey:object.objectId];
                indexCor++;
            }
            else if (indexCor < 4) {
                [self.coresConjugadosDict setObject:self.uiColorsArray[1] forKey:object.objectId];
                indexCor++;
            }
            else if (indexCor < 6) {
                [self.coresConjugadosDict setObject:self.uiColorsArray[2] forKey:object.objectId];
                indexCor++;
            }
            else if (indexCor < 8) {
                [self.coresConjugadosDict setObject:self.uiColorsArray[3] forKey:object.objectId];
                indexCor++;
            }
            else if (indexCor < 10) {
                [self.coresConjugadosDict setObject:self.uiColorsArray[4] forKey:object.objectId];
                indexCor++;
            }
            else if (indexCor < 12) {
                [self.coresConjugadosDict setObject:self.uiColorsArray[5] forKey:object.objectId];
                indexCor++;
            }
            else {
                [self.coresConjugadosDict setObject:self.uiColorsArray[6] forKey:object.objectId];
                indexCor++;
            }
        }

所以基本上,一些对象将与另一个对象组合。我需要做的是为每组两个组合对象设置一个UIColor。我有一个NSArray 和我想使用的UIColors,现在,每个满足特定条件的对象我在array 中添加第一个颜色,并增加它。这样,每组两个对象将具有不同的颜色。

所以,如果有 6 个对象...

对象 1,2 = 颜色 1 对象 3,4 = 颜色 2 对象 5,6 = 颜色 3

等等。

我想在没有if statement 的情况下实现这一目标。

【问题讨论】:

    标签: objective-c math if-statement operators


    【解决方案1】:

    您似乎想要进行这些转换:

    indexCor    uiColorsArray index
    --------    -------------------
    0, 1        0
    2, 3        1
    4, 5        2
    6, 7        3
    8, 9        4
    10, 11      5
    12 and up   6
    

    这可以通过将indexCor 除以 2 并将结果限制为 6 来实现,如下所示:

    [self.coresConjugadosDict
        setObject:self.uiColorsArray[min(indexCor++/2, 6)]
        forKey:object.objectId];
    

    注意:您可能需要定义自己的min 函数才能使用上述代码; 上面的代码不能与简单的MIN 宏一起正常工作,除非您将indexCor++ 移到单独的行上。

    Demo of the concept on ideone.

    【讨论】:

    • 注意 - 如果您将 indexCor 的增量移动到自己的行,则可以使用标准的 MIN 宏。
    • 谢谢,这就是我要找的。虽然,我如何定义自己的 min 函数?我正在尝试重新定义 min 宏,但正如您所说,它不起作用。
    • @Jorge 看一下演示,我在那里定义了一个min 函数。
    • @Jorge 这是因为我用inline 标记定义了min。这是an answer that explains how to do it correctly - 您需要在标题中定义,在.m 文件中定义extern inline ...。如果您不必在其他文件中使用min,您也可以在@implementation 上方的.m 文件中定义它。
    • @Jorge 当然,您可以这样做:只需添加一个检查indexCorif,并在超过上限时将其重置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多