Сортировать 4 дюйма, от меньшего к большему - PullRequest
0 голосов
/ 24 января 2012

Предположим, у меня есть 4 целых числа.

int a = 4;
int b = 2;
int c = 4;
int d = 1;

Как я могу отсортировать эти целые числа от самых маленьких до самых больших. Вывод должен быть примерно таким: d, b, a, c Большинство методов сортировки дают мне только значение отсортированного целого числа. Мне нужно знать имя.

Редактировать: Хорошо, я пишу алгоритм AI. У меня есть 4 целых, которые сохраняют приоритет направления. (Если ИИ входит в стену, он выбирает следующее лучшее направление). Итак, мне нужно найти самое низкое значение int, и если ИИ не может двигаться таким образом, я выбираю второе и самое низкое и т. Д.

Ответы [ 3 ]

4 голосов
/ 24 января 2012

Здесь, кажется, некоторая путаница; в вашем примере a не является «именем» для значения 4, это имя целочисленной переменной , которая в настоящее время содержит 4. Другими словами, «а» не является часть данных вашей программы.

Я предполагаю, что вы имеете в виду, что у вас есть пары имя / значение, которые вы хотите отсортировать, используя значение в качестве ключа. Обычный способ сделать это - определить тип для вашей пары, создать коллекцию и отсортировать коллекцию.

В простой C вы можете объявить:

typedef struct
{
   char *name;
   int value;
} MyPair;

Вы можете создать их массив и отсортировать его, используя стандартные функции C для сортировки массивов, используя только поле value в качестве ключа.

В Objective-C вы можете объявить класс для вашей пары:

@interface MyPair : NSObject
{
   NSString *name;
   int value;
}

// methods/properties

@end

Вы можете создать NSMutableArray экземпляров MyPair и затем отсортировать массив, опять же, вы просто используете свойство value (или переменную экземпляра) при выполнении сравнений для алгоритма сортировки.

Есть и другие варианты, конечно. После сортировки вы можете перебирать отсортированный массив и отображать поле / свойство name.

2 голосов
/ 24 января 2012

Вот объективный подход.К сожалению, вы не получите удовольствия от написания части AI, сортировка уже встроена в библиотеки.

int north = 1, south = 3, east = 2, west =4;

  NSDictionary * nDict = [NSDictionary dictionaryWithObjectsAndKeys:@"north", @"name", [NSNumber numberWithInt:north], @"value", nil];
  NSDictionary * sDict = [NSDictionary dictionaryWithObjectsAndKeys:@"south", @"name", [NSNumber numberWithInt:south], @"value", nil];
  NSDictionary * eDict = [NSDictionary dictionaryWithObjectsAndKeys:@"east", @"name", [NSNumber numberWithInt:east], @"value", nil];
  NSDictionary * wDict = [NSDictionary dictionaryWithObjectsAndKeys:@"west", @"name", [NSNumber numberWithInt:west], @"value", nil];


  NSArray * toBeSorted = [NSArray arrayWithObjects:nDict,sDict,eDict,wDict,nil];
  NSArray * sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"value" ascending:NO]];
  NSArray * sorted = [toBeSorted sortedArrayUsingDescriptors:sortDescriptors];
  NSLog(@"sorted %@", sorted);

Вывод

2012-01-23 19:50:21.079 TestEnvironment[19792:207] sorted (
        {
        name = west;
        value = 4;
    },
        {
        name = south;
        value = 3;
    },
        {
        name = east;
        value = 2;
    },
        {
        name = north;
        value = 1;
    }
)

Теперь вы можете проверить самый высокий приоритет с помощью

NSString * highestPriority = [[sorted objectAtIndex:0] objectForKey:@"name"];

Теперь у вас есть несколько классов, которые вы можете посмотреть (NSArray, NSDictionary, NSSortDescriptor, NSNumber)

0 голосов
/ 24 января 2012

Вы пометили этот Objective-C, но вы не написали ничего, что предлагало бы использовать Objective-C.Если вы хотите использовать Objective-C, я бы поместил элементы в NSMutableArray (для этого их нужно будет преобразовать в NSNumbers), а массив отсортировал их, как видно здесь .

Если вы просто хотите поместить их в прямой массив C, вы можете отсортировать их, используя heapsort (), qsort() или mergesort().

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