1

こんにちは私はこの形式のようにnslogに文字列の組み合わせを表示したい

abc
bca
acb
and so on 

しかし、私のプログラムは、この形式の順列のようにそれを示しています=

 (
        (
        c,
        b,
        a
    ),
        (
        b,
        c,
        a
    ),
        (
        c,
        a,
        b
    ),
        (
        a,
        c,
        b
    ),
        (
        b,
        a,
        c
    ),
        (
        a,
        b,
        c
    )
)

これは私が使用しているコードです

NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];

NSMutableArray *permutations = nil;

int i = 0;
for (i = 0; i < array.count ; i++){

    if (!permutations){
        permutations = [NSMutableArray array];
        for (NSString *character in array){
            [permutations addObject:[NSArray arrayWithObject:character]];


        }

    } else {

        //make copy of permutations array and clean og array
        NSMutableArray *aCopy = [permutations copy] ;
        [permutations removeAllObjects];

        for (NSString *character in array){

            //loop through the copy
            for (NSArray *oldArray in aCopy){

                //check if old string contains looping char..
                if ([oldArray containsObject:character] == NO){

                    //update array
                    NSMutableArray *newArray = [NSMutableArray arrayWithArray:oldArray];
                    [newArray addObject:character];

                    //add to permutations
                    [permutations addObject:newArray];

                }

            }
        }            
    }



}

NSLog(@"permutations = \n %@",permutations);
}

必要な形式で表示する方法を教えてください

4

4 に答える 4

2

この方法を試してください:

NSString *stringPermuted=[NSString new];
for (NSArray *array in permutations) {
    for (NSString *string in array) {
        stringPermuted=[stringPermuted stringByAppendingFormat:@"%@",string];
    }
    stringPermuted=[stringPermuted stringByAppendingFormat:@"\n"];
}

NSLog(@"permutations=\n%@",stringPermuted);

別の方法 :

NSString *stringPermuted=[NSString new];
for (NSArray *array in permutations) {
    stringPermuted=[stringPermuted stringByAppendingFormat:@"%@\n",[array componentsJoinedByString:@""]];
}
NSLog(@"permutations=\n%@",stringPermuted);
于 2013-01-10T14:16:05.377 に答える
1

表示するための簡単なメソッドを作成します

- (NSString *)formatPermutations:(NSArray *)permutations {
    NSString * formattedPermutations = @"";
    for (NSArray * permutation in permutations) {
        formattedPermutations = [formattedPermutations stringByAppendingFormat:@"%@\n", [self formatPermutation:permutation]];
    }
    return formattedPermutation;
}

- (NSString *)formatPermutation:(NSArray *)permutation {
    NSString * formattedPermutation = @"";
    for (NSString * letter in permutation) {
        formattedPermutation = [formattedPermutation stringByAppendingString:letter];
    }
    return formattedPermutation;
}

そしてそれを使用します

NSLog(@"permutations = \n %@",[self formatPermutations:permutations]);

別のオプション(そしておそらく好ましいオプション)は、独自のクラスを作成し、PermutationArrayそれらのメソッドPermutationをオーバーライドすることです。description

このようなメソッドはJavaと同等であり、オブジェクトから表現を取得する必要があるときはtoStringいつでも呼び出されます。NSLogNSString

于 2013-01-10T14:17:41.767 に答える
0

最後の行で、コンソールNSLog(@"permutations = \n %@",permutations);に全体を記録しています。NSMutableArrayXcodeは、読みやすくするためにそのようにフォーマットしています。

次のように結果をログに記録してみてください。

更新版:

for (NSArray *permutation in permutations){
    NSMutableString *tempString = [[NSMutableString alloc] initWithString:@""];
    for(NSString *character in permutation){
        [tempString appendString:character]
    }
    NSLog(@"%@\n",tempString);
}
于 2013-01-10T14:15:24.567 に答える
0

順列オブジェクトはNSArrayのNSArrayです。NSLogを使用してログに記録する場合、NSLogはdescriptionNSArrayのメソッドを呼び出し、これは改行を使用して配列内のオブジェクトをそれぞれ分割します。

印刷方法を変更したい場合は、独自のNSArrayサブクラスを使用してdescriptionメソッドを上書きするか、次のように少し複雑なログステートメントを記述します。

速くて汚い

for (NSArray *arrayOfStrings in permutations) {
    for (NSString *oneCharacterString in arrayOfStrings) {
        printf("%s", [oneCharacterString UTF8String]);
    }
    printf(" ");
}

少し速く、かなり汚れが少ない

// with linebreaks after each permutation
// If you don't want those, move the NSLog out of the for loop construct one big string to log in the format you like
for (NSArray *arrayOfStrings in permutations) {
    NSMutableString *permutationString = [NSMutableString string];
    for (NSString *oneCharacterString in arrayOfStrings) {
        [permutationString appendString:oneCharacterString]
    }
    NSLog(permutationString);
}

その他のコメント:とにかく1文字だけを保存したい場合は、NSNumberオブジェクトを使用することもできます(を使用して作成します[NSNumber numberWithChar:])。または、内部配列の代わりにNSStringまたはNSMutableStringを使用することもできます。

于 2013-01-10T14:20:36.930 に答える