【问题标题】:How to prevent duplication when picking objects in array from random indexes [duplicate]从随机索引中选择数组中的对象时如何防止重复[重复]
【发布时间】:2014-08-05 15:23:52
【问题描述】:

您好,我正在从一个数组中挑选对象并将其添加到另一个数组中。使用下面的方法

我在 for 循环中执行此操作。

 FirstArray = [@"object1",@"object2",@"object3",@"object4",@"object5"];
 SecondArray = [@"abc",@"pqr",@"xyz",@"123"];

NSUInteger FirstArrayIndex = arc4random() % [FirstArray count];
NSUInteger SecondArrayIndex = arc4random() % [SecondArray count];


[mainArray addObject:[FirstArray objectAtIndex:FirstArrayIndex]];
[mainArray addObject:[SecondArray objectAtIndex:SecondArrayIndex]];

但是当我使用它时 - 有时对象会在 mainArray 中重复。如何防止这种情况? 在不保存索引的情况下,还有其他方法可以实现吗?

【问题讨论】:

    标签: ios objective-c random nsarray arc4random


    【解决方案1】:

    在添加之前检查它是否存在于目标数组中:

     MyArray = [@"object1",@"object2",@"object3",@"object4",@"object5"];
     for (NSUInteger i = 0; i < 3; i++) {    // Assuming you are adding 3 objects
        NSUInteger RandomIndex;
        do {
            RandomIndex = arc4random() % [MyArray count];
        } while ([mainArray indexOfObject:[MyArray objectAtIndex:RandomIndex]] == NSNotFound)
        [mainArray addObject:[MyArray objectAtIndex:RandomIndex]];
    }
    

    【讨论】:

    • 感谢您的回答 - 我编辑了我的问题,请检查并提出解决方案
    【解决方案2】:

    如果您只是想随机化数组,请使用此答案提供的此方法https://stackoverflow.com/a/56656/1916721

    NSUInteger count = [MyArray count];
    for (NSUInteger i = 0; i < count; ++i) {
        NSInteger remainingCount = count - i;
        NSInteger exchangeIndex = i + arc4random_uniform(remainingCount);
        [MyArray exchangeObjectAtIndex:i withObjectAtIndex:exchangeIndex];
    }
    

    然后您可以将元素一个一个地拉出打乱的数组或完全复制它。

    另一种方法是检查它是否已经存在,否则查找另一个随机索引。

    【讨论】:

    • 感谢您的回答 - 我编辑了我的问题,请检查并提出解决方案 -
    • 您可以将两个数组都添加到临时 NSSet(不会添加重复项)。然后将集合转换回数组并打乱它。这可能有助于stackoverflow.com/a/3966974/1916721
    【解决方案3】:

    您应该从初始数组中删除您正在选择的对象,以免再次选择它。

    【讨论】:

      猜你喜欢
      • 2021-05-08
      • 1970-01-01
      • 2015-07-15
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 2017-05-20
      相关资源
      最近更新 更多