【问题标题】:Removing Random Items From NSMutableArray从 NSMutableArray 中删除随机项
【发布时间】:2016-12-06 01:16:55
【问题描述】:

我有一个程序,用户通过文本字段将字符串输入 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]];

 }

有没有办法获取显示的随机字符串的索引,然后将其从数组中删除?我希望它继续这样做,直到数组中的所有项目都被删除。谢谢

【问题讨论】:

    标签: ios objective-c arrays nsmutablearray


    【解决方案1】:

    // what goes here? 应该只是 self.myLabel.text

    尽管添加一个保存最后一个随机索引的实例变量可能会更好。那么所有的数组索引引用都应该使用该实例变量。

    您也有相同的代码行来计算随机数并设置重复 3 次的标签。为此创建一个新方法并从您现在拥有的三个位置调用该函数。

    【讨论】:

      【解决方案2】:

      有两种方法可以做到这一点:

      第一种方法是存储从随机方法获得的字符串。你可以在你的类中为此声明一个全局变量。而且我建议你总是在另一种方法中放置一段类似的代码。

      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];
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 2015-04-14
        • 2016-12-12
        • 2011-06-16
        • 1970-01-01
        相关资源
        最近更新 更多