从数组中删除项目以确保没有重复的字符串

时间:2014-03-20 15:48:12

标签: ios objective-c

我需要能够从plist中提取100个字符串并将其显示在我项目中的标签中。我设法让这个工作从我的plist中的两个不同数组中提取数据,然后生成一个随机字符串来显示。

我现在要做的是确保在一个会话中没有两个字符串显示两次,并且还能够设置一个计数器系统,在5次之后它会显示一条消息。

我正在考虑在x转动之后为显示消息做一个简单的计数器,但是当涉及到不显示数组中的重复时,我有点丢失。我需要它基本上只从数组中删除一个项目(每次用户按下按钮时不是plist)

- (IBAction)truth:(id)sender {


NSString *path = [[NSBundle mainBundle] pathForResource:
                  @"test" ofType:@"plist"];

NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSMutableArray *plistArray = plistDict[@"truth"];


NSDictionary *plistDict2 = [[NSDictionary alloc] initWithContentsOfFile:path];
NSMutableArray *plistArray2 = plistDict2[@"dare"];

plistArray = [plistArray arrayByAddingObjectsFromArray:plistArray2];

NSLog(@"%@", plistArray);


int randV = arc4random() % plistArray.count;


self.joke.text = plistArray[randV];

NSLog(@"dictionary: %@, array: %@", plistDict, plistArray);

}

3 个答案:

答案 0 :(得分:2)

您遇到的问题是,每次收到消息时,您都会再次阅读这些帖子并重新创建plistArray

正确的方法是将plistArray保存到局部变量(属性)中,并且只在第一次填充它。

然后,如果你想删除一个项目,你可以调用`[plistArray removeObjectAtIndex:randV];

编辑:代码

// In .h file 
@property (strong, nonatomic) NSMutableArray * plistArray;


- (IBAction)truth:(id)sender {

if (!self.plistArray) {
NSString *path = [[NSBundle mainBundle] pathForResource:
                  @"test" ofType:@"plist"];

NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSArray * plistArray1 = plistDict[@"truth"];


NSDictionary *plistDict2 = [[NSDictionary alloc] initWithContentsOfFile:path];
NSArray *plistArray2 = plistDict2[@"dare"];

self.plistArray = [[plistArray1 arrayByAddingObjectsFromArray:plistArray2] mutableCopy];
}

NSLog(@"%@", plistArray);


int randV = arc4random() % self.plistArray.count;


self.joke.text = self.plistArray[randV];
[self.plistArray removeObjectAtIndex:randV];
NSLog(@"dictionary: %@, array: %@", plistDict, self.plistArray);
}

@属性

答案 1 :(得分:0)

NSMutableSet创建plistArray,每次检索时都会从集合中删除它。的Presto!

编辑:添加代码

NSMutableSet *jokes = [[NSMutableSet alloc] initWithArray:plistArray];
NSString *joke = [jokes anyObject];
[jokes removeObject:joke];

免责声明:正如文档所述,anyObject不保证是随机的。我相信你可以在这里为自己解决问题。 E.g。

NSString *joke = [[jokes allObjects] objectAtIndex:arc4random() % [jokes count]];

答案 2 :(得分:0)

[plistArray removeObjectAtIndex: randV];