使用不自然的排序顺序重新排列 NSMutableArray

Rearranging NSMutableArray with unnatural sort order

我想以一种非常特殊的方式重新排列 NSMutableArray。这个

1, 7, 0, 45, 0, 0, 500, 0

会变成这样

1, 7, 45, 500, 0, 0, 0, 0

任何非 0(或某些特殊值)的值都应按正常顺序排在开头,0 排在末尾。我该怎么做?

这将用于从 table 视图中删除一个单元格,我的 table 可以使单元格索引始终指向数组中的元素。如果我留空 space 索引将不再与数组对齐。

你可以这样排序

[array sortUsingComparator:^(NSNumber *obj1, NSNumber *obj2) {
  if ([obj1 isEqualToNumber:@0]) {
    return NSOrderedDescending;
  } else if ([obj2 isEqualToNumber:@0]) {
    return NSOrderedAscending;
  }

  return [obj1 compare:obj2];
}];

不用担心,只需使用 removeObjectAtIndex: 就可以很好地满足我的需求。 removeObjectAtIndex: 通过将所有对象的索引偏移 -1 来移动所有对象。如果有人需要将 0 保留在末尾,那么您可以在删除它们之后添加它们。