在iOS中连接字符串,没有重复项

时间:2014-05-10 17:21:54

标签: ios string append

我想在一个循环中追加多个字符串,但它会不断添加相同的数据。

for(int i = 0 ; i <colorsArray.count ; i++)
{
    TheColor * color1 = [colorsArray objectAtIndex:i];
    if([color1.isSelected isEqualToString: @"YES"])
    {
        if ([colorsString isEqualToString:@""])
        {
            colorsString = color1.colorName;
        }
        else
        {
            colorsString =   [colorsString stringByAppendingFormat:@",%@",color1.colorName];
            NSLog(@"Color name %@",colorsString);
        }
    }
}

结果第一次:红色 结果第二次:红色,红色,黄色 结果3rf时间:红色,红色,黄色,紫色

1 个答案:

答案 0 :(得分:1)

您的问题是您每次都不要清理字符串,因此您将数据附加到上一个代码。在任何情况下,我都会为您编写最好的代码,因为您的代码有点多余:

colorsString = @"";
for(int i = 0 ; i <colorsArray.count ; i++)
{
    TheColor * color1 = [colorsArray objectAtIndex:i];
    if([color1.isSelected isEqualToString: @"YES"])
    {
        colorsString = [colorsString stringByAppendingFormat:@"%@%@", ([colorsString isEqualToString:@""]) ? @"" : @",", color1.colorName];

        NSLog(@"Color name %@",colorsString);
    }
}

但是我们可以再次优化代码:如果选择的颜色是每个时间1 ,所以您没有多个选定的颜色,您可以退出for循环< / strong>当你找到那种颜色时:

colorsString = @"";
for(int i = 0 ; i <colorsArray.count ; i++)
{
    TheColor * color1 = [colorsArray objectAtIndex:i];
    if([color1.isSelected isEqualToString: @"YES"])
    {
        colorsString = [colorsString stringByAppendingFormat:@"%@%@", ([colorsString isEqualToString:@""]) ? @"" : @",", color1.colorName];

        NSLog(@"Color name %@",colorsString);

        break;
    }
}

另一件事:这个:[color1.isSelected isEqualToString: @"YES"] ...告诉我为什么

您的BOOL课程中必须有@property TheColor而不是字符串。所以用这个替换属性:

@property (assign, getter=isSelected) BOOL selected;

然后在你的代码中你可以做到:

if(color1.isSelected)

所以这里是最终代码:

colorsString = @"";
for(int i = 0 ; i <colorsArray.count ; i++)
{
    TheColor * color1 = [colorsArray objectAtIndex:i];

    if(color1.isSelected)
    {
        colorsString = [colorsString stringByAppendingFormat:@"%@%@", ([colorsString isEqualToString:@""]) ? @"" : @",", color1.colorName];

        NSLog(@"Color name %@",colorsString);

        break;
    }
}