我有一个NSMutableArray
,其中包含十个以特定顺序排列的自定义对象。将NSArray的后半部分与前半部分交错
我所需要的是重新安排对象,使该阵列的第二半插入相邻的第一半:
之前:1,2,3,4,5,6,7,8,9 ,10
后:1,6,2,7,3,8,4,9,5,10个
我该如何做到这一点?
我有一个NSMutableArray
,其中包含十个以特定顺序排列的自定义对象。将NSArray的后半部分与前半部分交错
我所需要的是重新安排对象,使该阵列的第二半插入相邻的第一半:
之前:1,2,3,4,5,6,7,8,9 ,10
后:1,6,2,7,3,8,4,9,5,10个
我该如何做到这一点?
你所寻找被称为一个shuffle
(想想洗牌一副牌 - 相同的数据,不同的顺序)。下面的方法可以用来swap two objects within a mutable array.
- (void)exchangeObjectAtIndex:(NSUInteger)idx1
withObjectAtIndex:(NSUInteger)idx2
,而你正在修改它不能枚举一个数组,我会从循环访问数组中的元素,以及避免。相反,使用索引创建一个for循环并使用arc4random来生成第二个交换索引。
for (NSUInteger n = 0; n < array.count; n++) {
NSUInteger m = arc4random_uniform(array.count);
[array exchangeObjectAtIndex:n withObjectAtIndex:m];
}
还有更多的复杂性,可以像查看是否n == m
或否定某种偏见,但这应该让你的原始数组的“大多是”随机抽样进行添加。
[夫特]
夫特交换方法中交换一个可变的阵列中的两个项目。 FUNC exchangeObjectAtIndex(_ IDX1:诠释, withObjectAtIndex IDX2:智力)
用户内特库克提供了一些很好的shuffling methods for Swift
here.我在这里复制了不同诱变阵列的方法,因为它是最接近上述Objective-C的方法。
extension Array {
mutating func shuffle() {
for i in 0..<(count - 1) {
let j = Int(arc4random_uniform(UInt32(count - i))) + i
exchangeObjectAtIndex(i, withObjectAtIndex: j)
}
}
}
var numbers = [1, 2, 3, 4, 5, 6, 7, 8]
numbers.shuffle()
(无效)exchangeObjectAtIndex:(NSUInteger)IDX1 withObjectAtIndex:(NSUInteger)IDX2
(无效)sortUsingComparator:(NSComparator)CMPTR
为什么不创建第二个NSArray,在这个NSArray中按照您想要的顺序放置您的值?在此之后,如果你希望使用的第一阵列,你从它
[firstArray removeAllObjects];
删除所有项目,然后把物品带回从第二阵列:
for (int i = 0; i < [secondArray count]; i++)
{
[firstArray addObject: [secondArray objectAtIndex:i]];
}
为什么不这样做简单,如:NSArray的* arr = @ [对象1,对象2,对象3,对象4,对象5,对象6,对象7,对象8,对象9,对象10]; => ArAr [0],arr [5],arr [1],arr [6],arr [2],arr [7],arr [3],arr [8],arr [ 4],arr [9]]; – larva 2014-12-07 14:53:48