Создайте массив целочисленного свойства в Objective C

Создайте структуру данных таким образом, чтобы элементы стали ключом. В вашем примере структура данных может быть построена так, как показано ниже

"one": {A}
"two": {A,B}
"three": {A,B}
"four": {B,C}
"five": {C}

Теперь все, что вам нужно проверить, это взять каждый элемент в вашем входном наборе D и добавить счетчик для каждого из имен набора. , так что в вашем примере, D будет {"четыре", "пять", "шесть"}

Теперь вы можете просматривать циклы "четыре", "пять" и "шесть"

Step 1: The counter will be all zeros initially  

Step 2: After looking at the values for "four" the counter will look like below  
B:1, C:1  

Step 3: After looking at the values for "five" the counter will look like below  
B:1, C:2  

Step 4: After looking at the values for "six" the counter will look like below   
B:1, C:2  

Step 5: Choose the set with the maximum value. In this case it will be C.  

[ 117] Если вы используете python, вы можете использовать метод collection.Counter most_common.
https://docs.python.org/3/library/collections.html#collections.Counter

58
задан Cœur 19 September 2019 в 11:48
поделиться

4 ответа

Это должно работать:

@interface MyClass
{
    int _doubleDigits[10]; 
}

@property(readonly) int *doubleDigits;

@end

@implementation MyClass

- (int *)doubleDigits
{
    return _doubleDigits;
}

@end
30
ответ дан robottobor 24 November 2019 в 19:03
поделиться

Я просто размышляю:

я думаю, что переменная, определенная в ivars, выделяет место прямо в объекте. Это препятствует тому, чтобы Вы создали средства доступа, потому что Вы не можете дать массив значением к функции, но только через указатель. Поэтому необходимо использовать указатель в ivars:

int *doubleDigits;

И затем выделяют место для него в init-методе:

@synthesize doubleDigits;

- (id)init {
    if (self = [super init]) {
        doubleDigits = malloc(sizeof(int) * 10);
        /*
         * This works, but is dangerous (forbidden) because bufferDoubleDigits
         * gets deleted at the end of -(id)init because it's on the stack:
         * int bufferDoubleDigits[] = {1,2,3,4,5,6,7,8,9,10};
         * [self setDoubleDigits:bufferDoubleDigits];
         *
         * If you want to be on the safe side use memcpy() (needs #include <string.h>)
         * doubleDigits = malloc(sizeof(int) * 10);
         * int bufferDoubleDigits[] = {1,2,3,4,5,6,7,8,9,10};
         * memcpy(doubleDigits, bufferDoubleDigits, sizeof(int) * 10);
         */
    }
    return self;
}

- (void)dealloc {
    free(doubleDigits);
    [super dealloc];
}

В этом случае интерфейс похож на это:

@interface MyClass : NSObject {
    int *doubleDigits;
}
@property int *doubleDigits;

Редактирование:

я действительно не уверен, позволяется ли сделать это, те значения действительно на стеке, или они хранятся где-то в другом месте? Они, вероятно, хранятся на стеке и поэтому не безопасные использовать в этом контексте. (См. вопрос в списках инициализатора )

int bufferDoubleDigits[] = {1,2,3,4,5,6,7,8,9,10};
[self setDoubleDigits:bufferDoubleDigits];
12
ответ дан 9 revs 24 November 2019 в 19:03
поделиться

Это работает

@interface RGBComponents : NSObject {

    float components[8];

}

@property(readonly) float * components;

- (float *) components {
    return components;
}
6
ответ дан 24 November 2019 в 19:03
поделиться

Массивы C не являются одним из поддерживаемых типов данных для свойств. См. раздел "Язык программирования Ц" в документации по Xcode, на странице Объявленные свойства:

Поддерживаемые типы

Вы можете объявить свойство для любых Класс "Цель-С", базовый фонд тип данных, или "простые старые данные" (POD). (см. C++ Язык Примечание: POD Типы). Для ограничений по использованию Core Типы фондов, однако, см. Фонд."

POD не включает массивы C. См. . http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html

Если вам нужен массив, используйте NSArray или NSData.

Обходные пути, как я их вижу, похожи на использование (void *) для обхода проверки типа. Вы можете это сделать, но это делает ваш код менее поддерживаемым.

20
ответ дан 24 November 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: