首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代NSArray并计算差分

迭代NSArray并计算差分
EN

Stack Overflow用户
提问于 2014-03-06 20:02:24
回答 2查看 75关注 0票数 0

我有一个带有不同值的卡片对象的NSArray,比方说1,2,3,5,8,10。我想确定一张卡片是否可以玩,我用卡对象的可玩属性来做这件事,这显然也有一个值属性。规则是,当一张卡是可玩的(在本例中,只有卡1是可玩的),值只有1的牌也是可玩的。所以在上面的例子中,第二张牌也是可玩的,其余的也是不可玩的。为了清楚起见,排序可能有所不同,并不总是在上升或下降。

我想要的是遍历playerCards数组,并将1卡与数组中的所有其他卡进行比较,当差值为1时,将该卡的可玩属性设置为IsPlayable,然后再次循环,直到确定所有可玩卡。

代码语言:javascript
复制
First loop attempt (card 1 is playable):
2-1 = 1 card value 2 is playable
3-1 = 2 card value 3 is not playable
5-1 = 4 card value 5 is not playable
8-1 = 7 card value 8 is not playable
10-1 = 9 card value 10 is not playable

Second loop attempt (card 2 is now also playable):
3-2 = 1 card value 3 is playable
5-2 = 3 card value 5 is not playable
8-2 = 6 card value 8 is not playable
10-2 = 8 card value 10 is not playable

Third loop attempt (card 3 is now also playable):
5-3 = 2 card value 5 is not playable
8-3 = 5 card value 8 is not playable
10-3 = 7 card value 10 is not playable

Stop loop.

我不知道该怎么做。这就是我目前所得到的,但我迷失了方向;

代码语言:javascript
复制
for(int x = 0; x < [playerCards count]; x++) 
{    
Card *playerCard = [playerCards objectAtIndex:x];
if(playerCard.playable == IsPlayable){
something like playerCard.value-otherplayerCard.value ???}

你们能帮忙吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-06 20:13:46

您可以将for循环放入一个while循环中,在该循环中,while循环检查是否进行了更改,而for循环是否进行了更改(或者,如果一切都完成了)。

我假设Card类有一个名为cardNSNumber

代码语言:javascript
复制
BOOL changed = YES;
NSMutableArray *playableCards = [NSMutableArray array];

while (changed) {

    changed = NO;

    for (Card *playerCard in playerCards) {
        NSNumber *card = playerCard.card;

        if (playerCard.playable == IsPlayable) {
            if (![playableCards containsObject:card]) {
                NSLog(@"Card %@ is already playable", playerCard.card);
                [playableCards addObject:card];
                changed = YES;
            }
        } else {
            NSNumber *cardUp = @(card.integerValue + 1);
            NSNumber *cardDown = @(card.integerValue - 1);

            if ([playableCards containsObject:cardUp] || [playableCards containsObject:cardDown]) {
                NSLog(@"Card %@ is being made playable", playerCard.card);
                changed = YES;
                playerCard.playable = IsPlayable;
                [playableCards addObject:card];
            }
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-03-07 19:11:39

这里有一个通用的编程模式,在其他地方会很有用。模式是从一些有限的信息开始,并可能添加更多的信息,从而导致更多的信息;在这种情况下,“可玩”卡最初是那些标记为可玩的卡,然后那些附近的可玩卡变得可玩,以此类推。模式是

代码语言:javascript
复制
"start with initial data"
BOOL changed = YES;

while (changed)
{
    changed = NO;
    "try to find any new information"
    if ("any new information was found")
        changed = YES;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22234728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档