【问题标题】:randomize NSArray随机化 NSArray
【发布时间】:2010-01-16 07:47:41
【问题描述】:

我需要随机化一个已加载测验问题的 NSArray,但我需要保持元素按特定顺序排列。

【问题讨论】:

    标签: algorithm random nsarray


    【解决方案1】:

    NSArray 是一个不可变对象,这意味着您不能更改元素的顺序。我想我明白你的意思。只需在数据结构之上编写一些功能即可随机选择该数组的元素。您将需要跟踪已经访问过的元素,以免重新选择它们。

    您还可以使用子类型 NSMutableArray 制作数组的副本。选择一个问题后,将其从该数组中删除(您可以这样做,因为该数组现在是可变的)

    您将 C 函数用于随机数。参见 rand() 和 srand()

    【讨论】:

    • 我建议在 Objective-C 中使用 arc4random() 而不是 rand() 和 srand()
    【解决方案2】:

    如果我正确理解了这个问题:您有一系列问题,您想显示其中的一个子集(可能是固定大小的?),但该子集需要保留原始数组中的顺序?

    假设您有 N 个问题并想随机选择 M 个问题。您可以创建一个元素数组 [0 .. (N - 1)] 来存储原始数组的索引。然后,您可以使用Knuth/Fisher-Yate's algorithm 对该数组进行洗牌,对前 M 个元素进行排序,并使用前 M 个索引对原始数组进行查找。

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 1970-01-01
      • 2012-08-09
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多