如果循环中的项目存在多次删除问题

时间:2014-09-09 13:17:09

标签: ios objective-c loops pop

[myItem enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if (obj isEqualToString:@"someString" > 1) { // not correct syntax
        self.someLabel.text = [self.someLabel.text stringByAppendingString:[NSString stringWithFormat:@"\t\t%@\n", obj]];
    }
}];

我试图检查obj是否等于" someString"。如果" someString"显示多个我想从obj中删除它。

" itemOne"

" otherItem"

" someString"

" someString" < - 删除

" someString" < - 删除

我在目标c的循环中动态执行此操作时遇到问题。

5 个答案:

答案 0 :(得分:0)

更简单的解决方案是将数组转换为有序集,然后再转换回数组。这将删除重复。

答案 1 :(得分:0)

尝试这样,

UniqArray = [CurrentArray valueForKeyPath:@"@distinctUnionOfObjects.self"];

NSArray *UniqArray = [[NSOrderedSet orderedSetWithArray:CurrentArray]allObjects];

NSArray *UniqArray = [[NSSet setWithArray:CurrentArray] allObjects]

答案 2 :(得分:0)

您可以将其转换为有序集,删除重复项,然后将其转换回数组。

// remove duplicates
NSOrderedSet *myItemSet = [NSOrderedSet orderedSetWithArray:myItem];

// convert it back to NSArray
NSArray *myItemArrayWithoutDuplicates = myItemSet.array;

答案 3 :(得分:0)

您可以使用continue语句显示没有dublicates的数据

[myItem enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if ([obj isEqualToString:@"someString"]) { 
        self.someLabel.text = [self.someLabel.text stringByAppendingString:[NSString stringWithFormat:@"\t\t%@\n", obj]];
     continue;
    }
}];

这将在标签中分配的值之后的当前迭代中存在。

如果要删除dublicate对象。如果物品顺序无关紧要......

NSArray *itemsArray = [[NSSet setWithArray: myItem] allObjects];

如果物品的顺序很重要..

 NSMutableArray *uniqueItems = [NSMutableArray array];
for (id item in myItem)
    if (![uniqueItems containsObject:item])
        [uniqueItems addObject:item];

希望它可以帮助你..

答案 4 :(得分:0)

快速5

let array = ["itemOne", "otherItem", "someString", "someString", "someString"]

print(array) // "itemOne", "otherItem", "someString", "someString", "someString"]

var set = Set<String>()
for item in array{
    set.insert(item)
}

print(set) // ["otherItem", "someString", "itemOne"]