【问题标题】:Initially I have shuffled the array elements, how do I sort these elements? [duplicate]最初我已经对数组元素进行了洗牌,如何对这些元素进行排序? [复制]
【发布时间】:2013-12-19 06:11:36
【问题描述】:

最初我已经对数组元素进行了洗牌。现在如何按明确的顺序对这些数组元素进行排序。这是用于 iOS 中的纸牌游戏。

【问题讨论】:

  • 你没有表现出你的努力。显示到目前为止您尝试了什么

标签: ios objective-c


【解决方案1】:

您可以使用sortedArrayUsingComparator:对数组进行排序

[cards sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
    Card *c1 = (Card *)obj1;
    Card *c2 = (Card *)obj2;

    if (c1.value == c2.value) return NSOrderedSame;
    return (c1.value > c2.value) ? NSOrderedDescending : NSOrderedAscending;
}];

【讨论】:

  • 这看起来不正确。如果“c1 NSOrderedAscending (-1)。
  • 干杯@MartinR。今天早上还在半睡半醒。更新了答案。
  • @neilco 我会介绍一下我的阵列是怎样的。有一个主阵列,可容纳 52 张卡片。然后我创建了四个子数组,因为我有四个玩家。在将卡片分发给每个玩家之前,主数组被洗牌
  • @user2963228 此类相关信息应始终包含在原始问题中。你要排序什么——主数组还是四个玩家数组?
  • @neilco 四人数组
【解决方案2】:

您有几个选择,您可以查看 NSArray 文档 here 并查看“排序”下的内容。

如需快速了解,您可以使用 NSSortDescriptors

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"distance" ascending:YES];
NSArray *sortedArray = [shuffledArray sortedArrayUsingDescriptors:@[sortDescriptor]];

它们易于使用,您可以添加多个排序描述符。 你也可以使用比较器

[sortedArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    // Do your check here and return values below
    // NSOrderedSame
    // NSOrderedDescending
    // NSOrderedAscending
}];

编辑:

好的,根据我从下面的 cmets 中了解到的是,您是一个包含最初洗牌的卡片的数组。

NSArray *shuffledCards

我猜你在那个数组中有 Card 对象。如果你不这样做,我认为你应该这样做。然后有四名球员。我再次相信你有 Player 对象。

举个例子:

@interface Card : NSObject
    @property (nonatomic) NSInteger cardNumber;
@end

@interface Player : NSObject
    @property (nonatomic) NSArray *dealtCards;
@end

假设您从洗好的数组中随机选择 10 张牌并将它们发给每个玩家。

NSArray *randomTenCards = // You get 10 cards somehow

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"cardNumber" ascending:YES];
NSArray * sortedCards = [randomTenCards sortedArrayUsingDescriptors:@[sortDescriptor]];

// The Card objects are now sorted inside sortedCards array according to their cardNumbers.

[self.player1 setDealtCards:sortedCards];
...
...

基本思路是这样的。我希望你可以根据自己的问题调整它。

【讨论】:

  • 我已经尝试过这个 nssortdescriptor 但我担心它只能使用带有字典的数组?
  • 如果使用数组数组,我会用什么代替 sortDescriptorWithKey
  • 您也可以将排序描述符与自定义对象一起使用。它不必是字典数组。您只需将对象属性名称作为关键参数。如果数组中有复杂的结构,最好使用比较器。由于我还没有看到你的数组或对象,所以我无法给出明确的建议。
  • @user2963228:如果您将相关信息添加到 question 而不是将其“隐藏”在 cmets 中,会更有帮助。
  • @user2963228:我在您的问题中找不到相关信息:您的阵列是什么样的?它包含什么样的对象?对象应该如何分类?你期待什么结果?你尝试了什么? .....
猜你喜欢
  • 2013-01-03
  • 1970-01-01
  • 2015-06-28
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多