0

我正在尝试在我的数组的对象中循环,并且想知道如何检查其中的对象的内容,然后在我的搜索不适用时执行某些操作。

例如:

myArray = @[@"A1", @"A2", @"A3", @"B1", @"B2", @"B3", @"C1", @"C2", @"C3"];

我想检查 myArray 的内容,如果对象包含字母 A,我实际上会创建一个按钮,直到我创建一行带有字母 A 的对象的按钮。如果它包含不同的字母,比如 B,我将在字母 A 行按钮下方创建不同的按钮行。

它看起来像这样:

[A1] [A2] [A3]
[B1] [B2] [B3]
[C1] [C2] [C3]

我正在考虑进行这样的快速枚举:

for (NSString *string in myArray) 
{
    if (// string has letter A)
    {
        Add string to array of A
    }
    else if (// string has letter B)
    {
        Add string to array of B
    }
    else if (// string has letter C)
    {
        Add string to array of C
    }
}

但我不确定我是否做得正确和快速。

4

2 回答 2

0

这种方法可能会间接有所帮助。我不完全确定要问的是什么,所以你会怎么做。

如果要按前缀收集,请构建一个NSMutableDictionary其键将是@"A", @"B", ...,值是NSMutableArray. 对于你的每个字符串myArray,以它的前缀作为键在字典中查找数组值,并添加。

大致如下:

NSArray *myArray = @[@"A1", @"A2", @"A3", @"B1", @"B2", @"B3", @"C1", @"C2", @"C3"];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSString *s in myArray) {
    if ([s length] < 1) {
        continue;
    }
    NSString *key = [s substringToIndex:1];
    if (![dict objectForKey:key]) {
        [dict setObject:[NSMutableArray array] forKey:key];
    }
    NSMutableArray *bucket = [dict objectForKey:key];
    [bucket addObject:s];
}

这种方法可能无法直接回答您的问题,但可能具有启发性。它还具有可扩展的优点 - 不需要另一个if子句。

编辑:控制台中上面“po dict”的输出为

(lldb) po dict
$2 = 0x0a33e660 {
    A =     (
        A1,
        A2,
        A3
    );
    B =     (
        B1,
        B2,
        B3
    );
    C =     (
        C1,
        C2,
        C3
    );
}
于 2013-06-25T04:20:47.057 回答
0

使用 NSRange 查找字符串中的字符并执行您的操作。像这样试试:

 for (NSString *string in myArray) 
    {
        if ([string rangeOfString:@"A"].location != NSNotFound)//Contains "A"
        {
            Add string to array of A
        }
        else if ([string rangeOfString:@"B"].location != NSNotFound)//Contains "B"
        {
            Add string to array of B
        }
        else if ([string rangeOfString:@"C"].location != NSNotFound)//Contains "C"
        {
            Add string to array of C
        }
    }

打开这对你有帮助。

于 2013-06-25T04:28:25.377 回答