只向数组添加一定数量的相同对象?

时间:2015-09-16 21:43:03

标签: ios objective-c

我正在开发一个项目,当用户在我的UITableView中点击对象时,我将对象添加到数组中。用户可以添加单个对象的多个,但不超过4.如果数组中已有4个,我无法弄清楚如何停止添加对象。有没有办法检查单个对象存储在阵列中的数量?

这是我到目前为止所拥有的:

if (![deckArray containsObject:[cardArray objectAtIndex: indexPath.row]] || [deckArray containsObject:[cardArray objectAtIndex: indexPath.row]] ) {

        [deckArray addObject:[cardArray objectAtIndex: indexPath.row]];

}

1 个答案:

答案 0 :(得分:1)

首先,您的条件语句始终为true。它说:“如果牌组包含或不包含对象,则添加它。”

这是一种效率低下的方法。它很慢,因为你需要枚举deckArray中的每张卡,但是如果那个数组永远不会很大(比如100个元素),那么这就足够了:

id card = [cardArray objectAtIndex:indexPath.row];
int count = 0;
for( id deckCard in deckArray )
{
    if( [deckCard isEqualTo:card] )
        count++;
}

if( count < 4 )
    [deckArray addObject:card]; 

如果deckArray的顺序无关紧要,您可以使用NSCountedSet并快速查看已添加卡的次数:

// somewhere else, deck is declared as:
NSCountedSet * deck = [NSCountedSet set];

// somewhere else
id card = [cardArray objectAtIndex:indexPath.row];

if( [deck countForObject:card] < 4 )
    [deck addObject:card];