【发布时间】:2010-01-16 07:47:41
【问题描述】:
我需要随机化一个已加载测验问题的 NSArray,但我需要保持元素按特定顺序排列。
【问题讨论】:
我需要随机化一个已加载测验问题的 NSArray,但我需要保持元素按特定顺序排列。
【问题讨论】:
NSArray 是一个不可变对象,这意味着您不能更改元素的顺序。我想我明白你的意思。只需在数据结构之上编写一些功能即可随机选择该数组的元素。您将需要跟踪已经访问过的元素,以免重新选择它们。
您还可以使用子类型 NSMutableArray 制作数组的副本。选择一个问题后,将其从该数组中删除(您可以这样做,因为该数组现在是可变的)
您将 C 函数用于随机数。参见 rand() 和 srand()
【讨论】:
如果我正确理解了这个问题:您有一系列问题,您想显示其中的一个子集(可能是固定大小的?),但该子集需要保留原始数组中的顺序?
假设您有 N 个问题并想随机选择 M 个问题。您可以创建一个元素数组 [0 .. (N - 1)] 来存储原始数组的索引。然后,您可以使用Knuth/Fisher-Yate's algorithm 对该数组进行洗牌,对前 M 个元素进行排序,并使用前 M 个索引对原始数组进行查找。
【讨论】: