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

标签 ios objective-c

我的名字是“Ryan”,下次输入“Ryan”时应该检查它是否具有值,因此应该将其设为“Ryan_1”。同样,它应该检查是否有人再次添加“Ryan”,它应该将其更改为“Ryan_2”。

例子:

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

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

但是当我回到该部分并编辑值时,例如:我将 Ryan_2 更改为“xyz”,并再次考虑保留“Ryan”,保存的值将变为“Ryan_4”,而它应该是“Ryan_2”数组。假设我将“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];
        }
    }
}

最佳答案

我会推荐这样的扩展:

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") 过滤数组以获取要插入的名称的最大索引。

关于ios - 检查字符串是否已经存在并在数组中的字符串中添加一个数字作为后缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37570848/

相关文章:

ios - UITableView - 单元格图像在滚动时发生变化

iphone - 如何以编程方式触发 uibarbuttonitem 单击事件

ios - Swift SpriteKit 类结构的良好实践

ios - 如何将 NSMutableArray 转换为特定类型的 Swift 数组?

iphone - 单元格选择的事件指示器动画

objective-c - NSWindow objective-c/cocoa 的翻转坐标系

ios - 无法将 UIViewController 限制为仅纵向

ios - _cmd 的 swift 等价物是什么?

javascript - 在 Cocoa/OSX 应用程序中打包 node.js

javascript - iOS UIWebView,如何阻止加载特定的 URL 模式?