从 NSMutableArray 中删除随机项
Removing Random Items From NSMutableArray
我有一个程序,用户可以通过文本字段将字符串输入到 NSMutableArray (myArray) 中。该数组被传递到下一个视图控制器,其中有一个标签 (myLabel) 和两个按钮。打印到标签的是来自 myArray 的随机字符串。 ButtonA 在按下时显示数组中不同的随机字符串,ButtonB 删除打印到标签的当前字符串,然后将数组中的随机字符串显示到标签。
这是我目前的解决方案:
- (void)viewDidLoad {
self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]];
-(IBAction)ButtonA:(id)sender {
self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]];
}
-(IBAction)ButtonB:(id)sender {
NSInteger index = [myArray indexOfObject: //what goes here?];
[self.myArray removeObjectAtIndex:index];
self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]];
}
有没有办法获取显示的随机字符串的索引,然后将其从数组中删除?我希望它继续这样做,直到阵列中的所有项目都被删除。谢谢
// what goes here?
应该只是 self.myLabel.text
。
尽管添加一个保存最后一个随机索引的实例变量可能会更好。然后所有数组索引引用都应该使用该实例变量进行。
你也有同一行代码计算一个随机数并设置一个标签重复3次。为此创建一个新方法,并从您现在拥有的三个位置调用该函数。
您可以通过两种方式执行此操作:
第一种方法是存储从随机方法中获得的字符串。您可以在 class 中为此声明一个全局变量。而且我建议您始终将一段相似的代码放在另一个方法中。
NSString *generatedString;
- (NSString *)generateRandomString
{
generatedString = [self.myArray objectAtIndex:arc4random() % [myArray count]];
return generatedString;
}
然后在您的实施中:
- (void)viewDidLoad
{
self.myLabel.text = [self generateRandomString];
}
- (IBAction)buttonA:(id)sender
{
self.myLabel.text = [self generateRandomString];
}
- (IBAction)buttonA:(id)sender
{
[self.myArray removeObject:generatedString];
self.myLabel.text = [self generateRandomString];
}
另一种方法是存储生成的字符串的索引:
NSInteger generatedStringIndex;
- (NSString *)generateRandomString
{
generatedStringIndex = arc4random() % [myArray count];
NSString generatedString = [self.myArray objectAtIndex:generatedStringIndex];
return generatedString;
}
然后在您的实施中:
- (void)viewDidLoad
{
self.myLabel.text = [self generateRandomString];
}
- (IBAction)buttonA:(id)sender
{
self.myLabel.text = [self generateRandomString];
}
- (IBAction)buttonA:(id)sender
{
[self.myArray removeObject:generatedStringIndex];
self.myLabel.text = [self generateRandomString];
}
我有一个程序,用户可以通过文本字段将字符串输入到 NSMutableArray (myArray) 中。该数组被传递到下一个视图控制器,其中有一个标签 (myLabel) 和两个按钮。打印到标签的是来自 myArray 的随机字符串。 ButtonA 在按下时显示数组中不同的随机字符串,ButtonB 删除打印到标签的当前字符串,然后将数组中的随机字符串显示到标签。
这是我目前的解决方案:
- (void)viewDidLoad {
self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]];
-(IBAction)ButtonA:(id)sender {
self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]];
}
-(IBAction)ButtonB:(id)sender {
NSInteger index = [myArray indexOfObject: //what goes here?];
[self.myArray removeObjectAtIndex:index];
self.myLabel.text = [self.myArray objectAtIndex:arc4random() % [myArray count]];
}
有没有办法获取显示的随机字符串的索引,然后将其从数组中删除?我希望它继续这样做,直到阵列中的所有项目都被删除。谢谢
// what goes here?
应该只是 self.myLabel.text
。
尽管添加一个保存最后一个随机索引的实例变量可能会更好。然后所有数组索引引用都应该使用该实例变量进行。
你也有同一行代码计算一个随机数并设置一个标签重复3次。为此创建一个新方法,并从您现在拥有的三个位置调用该函数。
您可以通过两种方式执行此操作:
第一种方法是存储从随机方法中获得的字符串。您可以在 class 中为此声明一个全局变量。而且我建议您始终将一段相似的代码放在另一个方法中。
NSString *generatedString;
- (NSString *)generateRandomString
{
generatedString = [self.myArray objectAtIndex:arc4random() % [myArray count]];
return generatedString;
}
然后在您的实施中:
- (void)viewDidLoad
{
self.myLabel.text = [self generateRandomString];
}
- (IBAction)buttonA:(id)sender
{
self.myLabel.text = [self generateRandomString];
}
- (IBAction)buttonA:(id)sender
{
[self.myArray removeObject:generatedString];
self.myLabel.text = [self generateRandomString];
}
另一种方法是存储生成的字符串的索引:
NSInteger generatedStringIndex;
- (NSString *)generateRandomString
{
generatedStringIndex = arc4random() % [myArray count];
NSString generatedString = [self.myArray objectAtIndex:generatedStringIndex];
return generatedString;
}
然后在您的实施中:
- (void)viewDidLoad
{
self.myLabel.text = [self generateRandomString];
}
- (IBAction)buttonA:(id)sender
{
self.myLabel.text = [self generateRandomString];
}
- (IBAction)buttonA:(id)sender
{
[self.myArray removeObject:generatedStringIndex];
self.myLabel.text = [self generateRandomString];
}