检查字符串是否已经存在,并在数组中的字符串中添加一个数字作为后缀?

时间:2016-06-01 13:57:38

标签: ios objective-c

我的名字是“Ryan”,下次进入“Ryan”时应该检查它是否有值,所以它应该是“Ryan_1”。同样的方式它应该检查是否有人再次添加“Ryan”它应该将其更改为“Ryan_2”。

示例:

nameArray = ["Ryan","John","Ryan_2","Rhonda","Ryan_3","Kylie","Ryan_4","John_2"];

我正在使用下面的代码,这是第一次添加名称时工作正常。

但是当我回到该部分并编辑值Ex:我将Ryan_2改为“xyz”并再次考虑保留“Ryan”时保存的值变为“Ryan_4”,因为它应该是“Ryan_2”in数组。而且,如果我将“Ryan_4”更改为“somenewName”,现在其他重复名称的编号也会重新排列。

NSMutableArray *array = [[NSMutableArray alloc]init];

int occurrences = 0;

for(NSString *string in nameArray) {
    if ([value isKindOfClass:[NSString class]]) {
        if ([string containsString:value]) {
            [array addObject:string];
        }

        occurrences+= ([string containsString:value] ? 1 : 0);
    }
}       

if ([value isKindOfClass:[NSString class]]) {
    if (![value isEqualToString:@""]) {
        if (occurrences > 1) {
            value = [value stringByAppendingFormat:@"_%d", occurrences];
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我会推荐这样的扩展程序:

extension NSMutableArray {
public func appendWithSuffix(strNewEntry:String) {
    var n = 1
    var new = strNewEntry
    if self.containsObject(strNewEntry) {
        new = strNewEntry + "_\(n)"
        while self.containsObject( new ){
            n += 1
            new = strNewEntry + "_\(n)"
        }
    }
    self.addObject( new )
}}

如果没有找到,它将寻找完全匹配并插入,即它将添加" Ryan_5"而不是" Ryan"," John_3"而不是" John"等等。

另一种方法可能是迭代所有条目进行比较或使用"namexy".hasPrefix("Ryan")过滤数组以获取要插入的最大名称索引。

答案 1 :(得分:0)

- (IBAction)SaveText:(id)sender
{

if (array.count==0)
    {
        [array addObject:_txtAddText.text];
    }else
    {

        for(NSString *string in array)
        {
            if ([string containsString:_txtAddText.text] )
            {
                count = count+1;
              NSString *Localstring =[NSString stringWithFormat:@"%@%d",[string stringByAppendingString:@"_"],count];
                 NSLog(@"%@",Localstring);
                [array addObject:Localstring];
                break;
            }else
            {
                [array addObject:_txtAddText.text];
            }
        }

    }

    NSLog(@"%@",array);

}