У меня есть массив индексов [1 ... 20]. Первые 4 элемента indicesArray связаны с файлом определенного типа (назовите его тип A), остальные 16 связаны с типом B.
Я перемешиваю массив наугад. Теперь я хочу извлечь 4 из индексов, но самое большее только один из 4 может иметь тип A.
Я думаю, что мне нужно использовать здесь функцию enum, чтобы определить индексы 1-4 как "тип A" и индексы 5-20 как "тип B", тогда, если я посмотрю, например, на. первый элемент моего недавно рандомизированного indicesArray [0], я мог бы сказать, какой это тип и действовать соответственно.
То, как я видел enum из примеров, выглядит примерно так:
enum category { typeA = 0, typeB };
Можно ли назначить индексы 1-4 для типа A, а остальные для типа B, или я здесь не на том пути? заранее спасибо.
Изменить, чтобы включить фрагмент кода
Я попытался проверить это и сразу столкнулся с ошибкой
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int* indices = malloc(20*sizeof(int));
for (int i=0; i<20; i++) {
indices[i] = i;
}
enum category {typeA, typeB};
enum category categoryForIndex(int index) {
if (index >= 1 && index <= 4) {
return typeA;
} else {
return typeB;
}
}
[pool drain];
return 0;
}
Когда я пытаюсь скомпилировать это, я получаю сообщение об ошибке «вложенные функции отключены, используйте -fnested-functions для повторного включения», что обычно происходит, когда вторая основная часть попадает в микс случайно или что-то подобное. Есть идеи?
Изменить, чтобы включить некоторый код, который показывает, как применить решение на практике
#import <Foundation/Foundation.h>
enum category {typeA, typeB};
enum category categoryForIndex(int index) {
if (index >= 1 && index <= 4) {
return typeA;
} else {
return typeB;
}
}
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int* indices = malloc(20*sizeof(int));
for (int i=1; i<=20; i++) {
indices[i] = i;
}
NSLog(@"index[0] is %i:", indices[16]);
enum category index;
index = indices[16];
switch (categoryForIndex(index)) { //this tests to see what category 16 belongs to
case typeA:
NSLog(@"index is of type A");
break;
case typeB:
NSLog(@"index is of type B");
break;
default:
NSLog(@"index not valid");
break;
}
[pool drain];
return 0;
}