仅从具有相同多个值的数组中删除一个项目

时间:2013-06-07 13:17:21

标签: iphone ios

我的应用中有一个数组,其中包含多个相同的值。我需要一次从数组中删除一个值,无论它是否有相同的更多值。

Level1 Business, 
Level2 Economy, 
Level2 Economy,
Level1 Business

如何实现这一点,主要的是这些值是动态的,这些值或多或少也可以。请指导以上。 以下是我的尝试。

if([arr containsObject:[NSString stringWithFormat:@"%d",ind]]){ 
[arr removeObject:[NSString stringWithFormat:@"%d",ind]]; 
}

这件事删除了所有类似的条目,不是必需的。提前谢谢。

7 个答案:

答案 0 :(得分:4)

尝试这样,

NSArray *array = [NSArray arrayWithObjects:@"Level1 Business", @"Level2 Economy", @"Level2 Economy", @"Level1 Business", nil];
NSMutableArray *mainarray=[[NSMutableArray alloc]initWithArray:array];
int n=[mainarray indexOfObject:@"Level2 Economy"];//it gives first occurence of the object in that array
if(n<[mainarray count]) // if the object not exist then it gives garbage value that's why here we have to take some condition
    [mainarray removeObjectAtIndex:n];
NSLog(@"%@",mainarray);

O / P: -

(
    "Level1 Business",
    "Level2 Economy",
    "Level1 Business"
)

答案 1 :(得分:1)

使用[arr removeObjectAtIndex:yourIndex ]删除动态

处特定位置的对象

答案 2 :(得分:1)

正如你所说,

[array removeObject:@"SomeObject"];

删除 isEqual:返回YES的所有实例。要仅删除第一个实例,可以使用类似

的内容
NSUInteger index = [array indexOfObject:@"SomeObject"];
if(index != NSNotFound) {
    [array removeObjectAtIndex:index];
}

答案 3 :(得分:1)

示例代码:

NSMutableArray *arr = [[NSMutableArray alloc]initWithObjects:@"hello",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",nil];
NSUInteger obj = [arr indexOfObject:@"hi"];  //Returns the lowest integer of the specified object
[arr removeObjectAtIndex:obj];  //removes the object from the array
NSLog(@"%@",arr);

在你的案例中:

if([arr containsObject:[NSString stringWithFormat:@"%d",ind]])
{ 
     NSUInteger obj = [arr indexOfObject:[NSString stringWithFormat:@"%d",ind]];  //Returns the lowest integer of the specified object
     [arr removeObjectAtIndex:obj];
}

答案 4 :(得分:0)

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

for (NSString *word in duplicateWordsArray){
    if (!uniques.contains(word)){
            [ uniques addObject:word];
    }
}

我是通过手机编写的,因此它没有针对代码进行格式化,但是这将很快为您完成,并且您将拥有一个具有独特单词的数组(uniquearray)。然后你可以使用那个或将原始array =设置为唯一数组

答案 5 :(得分:0)

这里你的要求就像NSSet的定义,它只包含唯一的对象。 但这只会暗示两个相同的值对象,实际上也是指同一个内存位置。

如果是这种情况,那么您可以尝试下面提到的代码:

// create set from an array
NSSet *telephoneSet = [NSSet setWithArray: myArray];

// create array from a set
NSMutableArray *array = [NSMutableArray arrayWithArray:[set allObjects]];

我不知道它是否适合您的要求。但为此,需要检查对象的相等级别。

仍然可以帮助您减少代码行。

答案 6 :(得分:0)

NSArray *input = [NSArray arrayWithObjects:@"Level1 Business", @"Level2 Economy", @"Level2 Economy", @"Level1 Business", nil];
    NSMutableArray *output = [[NSMutableArray alloc] init];
    [output addObject:[input objectAtIndex:0]];
    for(NSString *value in input) {
      if(![output containsObject:value]) 
        [output addObject:value];
    }