2014-12-07 37 views
-4

我有一个NSMutableArray,其中包含十个以特定顺序排列的自定义对象。将NSArray的后半部分与前半部分交错

我所需要的是重新安排对象,使该阵列的第二半插入相邻的第一半:

之前:1,2,3,4,5,6,7,8,9 ,10
后:1,6,2,7,3,8,4,9,5,10个

我该如何做到这一点?

+0

为什么不这样做简单,如: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

回答

1

你所寻找被称为一个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() 
1
  • (无效)exchangeObjectAtIndex:(NSUInteger)IDX1 withObjectAtIndex:(NSUInteger)IDX2

  • (无效)sortUsingComparator:(NSComparator)CMPTR

0

为什么不创建第二个NSArray,在这个NSArray中按照您想要的顺序放置您的值?在此之后,如果你希望使用的第一阵列,你从它

[firstArray removeAllObjects]; 

删除所有项目,然后把物品带回从第二阵列:

for (int i = 0; i < [secondArray count]; i++) 
{ 
[firstArray addObject: [secondArray objectAtIndex:i]]; 
} 
相关问题