Повторяющийся числовой массив - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблемы с созданием программы, которая принимает числа в массиве и возвращает их в виде строки.Мой следующий код в моем файле

main.m:

#import <Foundation/Foundation.h>
#import "NumberRepeater.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NumberRepeater *repeater1 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@1, @10]]];

        [repeater1 initWithNumbers:@[@[@1, @10]]];
        NSLog(@"%@", [repeater1 process]);

        NumberRepeater *repeater2 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@1, @2], @[@2, @3]]];

        NSLog(@"%@", [repeater2 process]);

        NumberRepeater *repeater3 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@10, @4], @[@34, @6], @[@92, @2]]];

        NSLog(@"%@", [repeater3 process]);
    }
    return 0;
}

Код в моем файле NumberRepeater.h:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NumberRepeater : NSObject
- (instancetype)initWithNumbers:(NSArray *)numbers;

- (NSString *)process;


@end

NS_ASSUME_NONNULL_END

Код в моем NumberRepeater.mfile:

#import <Foundation/Foundation.h>
#import "NumberRepeater.h"
@implementation NumberRepeater

- (instancetype)initWithNumbers:(NSArray *)numbers {
    NumberRepeater *repeater1 = [[NumberRepeater alloc] 
initWithNumbers: @[@[@1, @10]]];
    [repeater1 initWithNumbers:@[@[@1, @10]]];
    NSLog(@"%@", repeater1);

    return 0;
}

- (NSString *)process {


    return 0;
}

@end

Мой ожидаемый результат должен быть:

1111111111
11, 222
10101010, 343434343434, 9292

Это ни в коем случае не школьное задание, которое мне нужно решать.Я хотел бы получить решение, однако руководство к этому было бы замечательно.Я чувствую, что у меня это почти получилось, потому что я задал вопросы, похожие на это, и получил результат, который мне нужен, но, очевидно, мне не хватает, я просто не знаю, что.Я понимаю, что в моем методе процесса отсутствует код, просто я точно не знаю, что туда вставить.Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

• Мне нужно объяснить синтаксис Array для вас в соответствии с вашим вопросом,

  1. Сначала вы можете объявить массив таким образом @[@1,@2,....] этот массив объекта NSNumber как Int Значение, потому что массив содержит только объекты идентификатора, поэтому мы не можем напрямую использовать Int, но мы используем NSnumber как этот.1012 * массив объекта массива как этот пример @[@[@10, @4], @[@3, @6], @[@2, @9]] этот массив массива @[@[],@[],....etc]

• по вашему вопросу я даю вам NSArray с двумя элементами простоверните мне строку с повторением первого (второго) раза

   Example :

        Input @[@1,@2]      repeat number#1  two times
        Output should be 11

        Input @[@1,@10]      repeat number#1  10 times
        Output should be 1111111111

       Input @[@[@1,@3],@[@3,@4]]      repeat number#1  3 times , number#3   4 time
        Output should be 111 3333

Solution

NumberRepeater.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NumberRepeater : NSObject {
      NSArray * numbers; // private number array will be initialized during initialization of object
}
- (instancetype)initWithNumbers:(NSArray *)numbers;

- (NSString *)process;
@end

NS_ASSUME_NONNULL_END

NumberRepeater.м

#import "NumberRepeater.h"
#import <Foundation/Foundation.h>


// NumberRepeater Extention for set private numbers
@interface NumberRepeater ()
@property (nonatomic,retain) NSArray *numbers;
@end


@implementation NumberRepeater
@synthesize numbers;

- (instancetype)initWithNumbers:(NSArray *)numbers {

    self = [super init];
    if (self) {
        self.numbers = numbers;
    }
    return self;
}

- (NSString *)process {

// if numbers have No Data
   if (numbers.count == 0) { return  @"0"; }

    // Array of array  each array have two element first is number to repeat and second have number of repetation
    // Example @[@1, @2]   repeat number(1)   TWO times  so out put should be 11
 //   @[@[@1, @2], @[@2, @3]]

    NSMutableString * output = [NSMutableString new];

    for (NSArray*item in numbers) {

        // Array should be with this Format
          // Example @[@1, @2]   repeat number(1)   TWO times

              // assert item have tow items only  like that @[@1,@2]
           NSAssert(item.count == 2,@"Array Should have Two items only");

        NSNumber *numberToRepeat = item[0]; // repeat
        NSNumber *repetitionCount = item[1]; //repetition Count

        NSMutableString * repeatdString = [NSMutableString new];

        for (NSInteger i= 0; i < [repetitionCount integerValue] ; i++) {
            [repeatdString appendString:[numberToRepeat stringValue]];
        }

        [output appendString:repeatdString];
        [output appendFormat:@" "]; // space on join with muti array

    }


    return output;
}
@end

main.m

#import <Foundation/Foundation.h>
#import "NumberRepeater.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NumberRepeater *repeater1 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@1, @10]]];

        NSLog(@"%@", [repeater1 process]);

        NumberRepeater *repeater2 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@1, @2], @[@2, @3]]];

        NSLog(@"%@", [repeater2 process]);

        NumberRepeater *repeater3 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@10, @4], @[@34, @6], @[@92, @2]]];

        NSLog(@"%@", [repeater3 process]);
    }
    return 0;
}
0 голосов
/ 06 декабря 2018

Я не правильно понял ваш вопрос, но я думаю, что вам нужна функция, которая принимает аргументы в виде массива чисел и возвращает строку, объединенную всеми числами, если это то, что вам нужно, вы можете создать такую ​​функцию: -

-(NSString *)getStringFromArray:(NSArray <NSNumber *> *)array{
    NSString *numberString = @"";
    for (NSNumber *no in array) {
        numberString = [numberString stringByAppendingString:no.stringValue];
    }
    return numberString;
}

Вызовите метод в вашем классе следующим образом: -

NSLog(@"Number String %@",[self getStringFromArray:@[@1,@2,@3,@4]]);

Вывод

Number String 1234
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...