-5

我正在尝试创建一个排序数组,但我无法理解如何创建它。我有一个字符串 (s1) 和另一个数组 (a1,a2,a3,....)。

我想使用字符串和数组创建一个新数组。我想把它们按这个顺序排列(s1 - ar - s1 - ar - s1 -ar)。

*ar = 以随机顺序排列的原始数组。

我将如何创建这个数组?

谢谢你的帮助

*编辑:我想要一个在每个备用索引处都有 s1 字符串的洗牌数组

4

3 回答 3

1

如果我理解正确,您需要创建一个新数组,然后一个一个地填充它。所以就像插入字符串然后从数组中随机取一个元素,直到你用完元素。

如果要修改原始数组,则它必须是可变的(您使用的是什么语言?)

在objective-c中它会是这样的:

NSString* string;

NSArray* array;

NSMutableArray* temparray = [NSMutableArray arrayWithArray:array];

NSMutableArray* result = [[NSMutableArray alloc] initWithCapacity:[array count]*2];

for (int i=0; i< [array count];i++) {
    [result addObject:string];
    int index = rand() % [temparray count];
    [result addObject:[temparray objectAtIndex:index]];
    [temparray removeObjectAtIndex:index];
}
于 2013-01-11T12:21:21.127 回答
1

看看NSMutableArray

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"a1", @"a2", @"a3",nil];
[array insertObject:@"s1" atIndex:0]; // add as first object
[array addObject:@"s2"]; // add as last object
 // sort
[array sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

// swap elements
[array exchangeObjectAtIndex:1 withObjectAtIndex:2];

for (NSString *s in array)
{
    NSLog(@"elemnt: %@", s);
}
于 2013-01-11T12:35:02.257 回答
0

我最终改组了数组并将字符串添加到每个偶数索引。

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"a1", @"a2", @"a3", @"a4", @"a5",nil];

[array shuffle];
for (int i = 0 ; i<array.count; i=i+2) {
    [array insertObject:@"s1" atIndex:i];
}

NSLog(@"%@",array);

这就是我改组数组的方式

NSMutableArray+Shuffling.h

    @interface NSMutableArray (Shuffling)
    - (void)shuffle;
    @end 


NSMutableArray+Shuffling.m
#import "NSMutableArray+Shuffling.h"

@implementation NSMutableArray (Shuffling)

- (void)shuffle
{
    for (uint i = 0; i < self.count; ++i)
    {
        // Select a random element between i and end of array to swap with.
        int nElements = self.count - i;
        int n = arc4random_uniform(nElements) + i;
        [self exchangeObjectAtIndex:i withObjectAtIndex:n];
    }
}
@end

这就是我输出的样子 Array (s1, a3, s1, a5, s1, a4, s1, a2, s1, a1)

抱歉,如果问题措辞不当。

于 2013-01-11T13:09:45.003 回答