随机化NSArray

时间:2010-01-16 07:47:41

标签: algorithm random nsarray

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

2 个答案:

答案 0 :(得分:0)

NSArray是一个不可变对象,意味着您无法更改元素的顺序。我想我得到了你得到的东西。只需编写一些超出数据结构的功能,随机选择该数组的元素。您需要跟踪已经访问过的元素,因此不要重新选择它们。

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

您对随机数使用C函数。请参阅rand()和srand()

答案 1 :(得分:0)

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

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