NSArray Сортировка не сортируется правильно - PullRequest
0 голосов
/ 05 августа 2011

У меня есть класс (Piece), у которого есть свойство NSMutableArray с именем attachBlocks.

Всякий раз, когда часть инициализируется, 4 объекта Block инициализируются и помещаются в attachBlocks.

В то же время, в своем классе контроллеров, перед тем, как выпустить кусок, я добавляю все блоки из piece.attachedBlocks в NSMutableArray в моем контроллере, называемом boardBlocks. Поэтому boardBlocks имеет каждый блок на плате в своем массиве (отсюда и название).

В методе моего конструктора я пытаюсь отсортировать этот массив boardBlock, чтобы все объекты на плате сортировались снизу справа вверху слева, поэтому после (0,1) будет блок (0,0), и (1,0) будет следовать после (2,5).

Вот код для моей сортировки:

//In Block.m:

- (NSComparisonResult)compareTo:(Block *)other
{
    if (self.location.y < other.location.y && self.location.x < other.location.x)
    {
        return NSOrderedAscending;
    }
    else if (self.location.y == other.location.y && self.location.x == other.location.x)
    {
        return NSOrderedSame;
    }
    else
    {
        return NSOrderedDescending;
    }
}

//In my controller.m

- (void)sortTheArray
{
    NSArray *sortedBlocks = [boardBlocks sortedArrayUsingSelector:@selector(compareTo:)];

    for (Block *b in boardBlocks)
    {
        NSLog(@"%d, %d", b.location.x, b.location.y);
    }

    for (Block *b in sortedBlocks)
    {
        NSLog(@"(%d, %d)", b.location.x, b.location.y);
    }
}

Как я уже говорил, каждый раз, когда создается кусок объекта, 4 объекта блока инициализируются один за другим.

Когда я делаю это после того, как одна часть была создана и выпущена, сортировка работает. Однако, когда я пытаюсь использовать более одного куска, я получаю следующий результат:

boardBlocks:

(8, 17) (7, 18) (8, 18) (9, 18) (6, 17) (7, 17) (5, 18) (6, 18)

Первая часть состоит из блоков в первых четырех координатах. Второй кусок состоит из блоков по четырем вторым координатам

Результат после сортировки:

(6, 18) (5, 18) (7, 17) (6, 17) (9, 18) (8, 18) (7, 18) (8, 17)

Результат должен быть:

(9, 18) (8, 18) (7, 18) (6, 18) (5, 18) (8, 17) (7, 17) (6, 17)

Теперь вы можете видеть, что он правильно сортирует каждый фрагмент по одному (первые 4 координаты сортируются правильно, а последние 4 сортируются правильно) .. но вместе они сортируются неправильно, потому что (9, 18 ) должен стоять перед каждой другой координатой там.

Сортировка происходит, когда объекты инициализируются в массив автоматически или когда вызывается sortedArrayUsingSelector:

Я не могу обернуть голову, почему он сортирует первые четыре, затем вторые четыре, но не весь массив в целом.

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