0

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

Level1 Business, 
Level2 Economy, 
Level2 Economy,
Level1 Business

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

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

这个东西删除了所有类似的条目,不是必需的。提前致谢。

4

7 回答 7

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);

运单:-

(
    "Level1 Business",
    "Level2 Economy",
    "Level1 Business"
)
于 2013-06-07T13:21:14.550 回答
1

正如你所说,

[array removeObject:@"SomeObject"];

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

NSUInteger index = [array indexOfObject:@"SomeObject"];
if(index != NSNotFound) {
    [array removeObjectAtIndex:index];
}
于 2013-06-07T13:26:01.280 回答
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];
}
于 2013-06-07T13:31:40.080 回答
0

用于[arr removeObjectAtIndex:yourIndex ]动态移除特定位置的对象

于 2013-06-07T13:21:37.170 回答
0
NSMutableArray *uniques= [[NSMutableArray alloc] init];

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

我是用手机写的,所以它没有格式化为代码,但这会很快为你完成,你将拥有一个包含唯一单词的数组(uniquearray)。然后您可以使用那个或将原始数组 = 设置为唯一数组

于 2013-06-07T13:25:25.030 回答
0

在这里,您的要求就像 NSSet 的定义,它只包含唯一的对象。 但这意味着只有当两个相同的值对象实际上也引用相同的内存位置时。

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

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

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

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

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

于 2013-06-07T13:27:55.440 回答
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];
    }
于 2013-06-07T19:03:02.493 回答