从NSMutableArray中检查并删除特定字符串,无需使用索引。

8
在Xcode中,我将一些NSString存储在NSMutableArray中。
Hello
Here
MyBook
Bible
Array
Name2
There
IamCriminal

用户可以输入字符串。

Name2

我需要从NSMutableArray中删除特定的字符串,但不知道该字符串的索引。我有一些想法,可以使用迭代。是否有其他更好的方法?请提供具有样本代码的答案。
6个回答

22

你可以在 NSMutableArray 中使用containsObject方法。

if ([yourArray containsObject:@"object"]) {
    [yourArray removeObject:@"object"];
}

Swift:


(翻译:Swift)
if yourArray.contains("object") {
    yourArray = yourArray.filter{ $0 != "object" } 
}

3
我认为这样不会起作用。这个方法将检查引用而非内容。 - Inder Kumar Rathore
2
它能够工作是因为您正在使用常量字符串。将此 NSString *str = [[NSString alloc] initWithUTF8String:"hello"]; 插入数组中,然后使用您的方法删除 @"hello" - Inder Kumar Rathore
1
你可能会认为你在比较两个字符串的指针地址,但实际上它比较的是字符串本身。 :P - Andres Canella
无法工作,因为您通过创建@object"具有两个实例...不同的内存对象。 - Ondrej Rafaj

8
[array removeObject:@"Name2"];

NSMutableArray的removeObject:方法文档说明如下:
匹配是基于一个对象对isEqual:消息的响应确定的。
换句话说,此方法会迭代您的数组,将对象与@"Name2"进行比较。如果一个对象等于@"Name2",它将从数组中删除。

0

试试这个,

BOOL flag = [arrayName containsObject:Str];   

if (flag == YES)
{   
     [arrayName removeObject:Str];
}

我认为这不会起作用。这个方法将检查引用而不是内容。 - Inder Kumar Rathore
1
@InderKumarRathore,我已经在代码中实现了它,并且它正在工作。 - Kalpesh
请仔细阅读问题。我已经评论了 @arthan.v 的答案,请仔细查看。 - Inder Kumar Rathore
@InderKumarRathore 请查看enderstocker的答案(以及文档)。 - Lightness Races in Orbit

0
[array removeObject:@"name2"];

2
我认为这不会起作用。这个方法将检查引用而不是内容。 - Inder Kumar Rathore

0
你可以尝试这个。
for(NSString *string in array)
{
    if([[string lowercasestring] isEqualToSring:[yourString lowercasestring]])
    {
        [array removeObject:string];
        break;
    }
}

他正在寻求一种解决方案,除了你已经写的传统方法之外。 - Inder Kumar Rathore

0

你可以简单地使用

[yourArray removeObject:stringObjectToDelete];

这种方法使用indexOfObject:来定位匹配项,然后使用removeObjectAtIndex:来删除它们。因此,匹配是基于对象对isEqual:消息的响应来确定的。如果数组不包含anObject,则该方法没有任何效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接