如何检查数组以查看它是否包含零值?

时间:2015-12-23 02:35:43

标签: arrays swift

我有一个充满nil的空数组,我将填充整数数组,并希望查看它何时不再包含nil值。

我需要检查是否存在nil所以如果存在则可以添加int,如果没有nil值则停止游戏。

var smallestArr = [Int?](count: 25, repeatedValue: nil)

if smallestArr.contains(nil){
    //add ints until it doesn't contain anymore nil
}else{
    //end game
}

4 个答案:

答案 0 :(得分:7)

而不是

{ 
    "_id" : 5,
    "product" : 3,
    "store" : 2
    "key": [
        { 
            "attribute": "xxxxxxx",
            "name": "book",
            "additionaPrice": "xxxx",
            "file": "xxxx" ,
        }
    ]
}

把这个:

if smallestArr.contains(nil) {
斯威夫特4:

if smallestArr.contains{$0 == nil} {

另一种方式:

if smallestArr.contains(where: {$0 == nil}) {

答案 1 :(得分:1)

您可以尝试这样的事情:

var smallestArr = [Int?](count: 25, repeatedValue: nil)

var updatedArr = smallestArr.map { (val) -> Int in
    if(val == nil){
    //change this value to the int that you want to replace nil with
        return -1;
    }
    else{
        return val!;
    }
}

updatedArr将使用所有“nil”替换为“-1”的数组,并且所有其他值保持不变。

在给出这个答案之后,我觉得你应该按照以下方式初始化你的数组:

var smallestArr = [Int?](count: 25, repeatedValue: -1)

因此,你将完全避免零,并防止进入致命的错误状态!!

答案 2 :(得分:0)

Array类型不是堆栈。它不是固定长度,所以如果你试图用有效的Int值逐步替换nil,期望最终所有的nils都被推出,你就错了。虽然这不是你的问题,但考虑到你的代码样本似乎暗示了理解。

[](repeatedValue:count:)是一种方便的方法,可以多次初始化具有相同值的数组。它与创建数组和一系列append方法调用相同,它不会为数组提供特殊功能,FIFO或其他。

答案 3 :(得分:0)

另一种可能的解决方案,使用reduce计算非零条目数(并与长度进行比较):

var smallestArr = [Int?](count: 25, repeatedValue: nil)

// ...

if(smallestArr.reduce(0) {(tot,num) in tot + (num == nil ? 0 : 1) } == smallestArr.count) {
    // end game
} 
else {
    //add ints until it doesn't contain anymore nil
} 

但是我刚看到matt:s .contents.flatMap解决方案;我相信他的答案是最好的。