2015-12-23 191 views
0

我有一个空数组全零的,我将填充阵列全整数的和希望看到的,当它不再包含空值。如何检查数组以查看它是否包含零值?

我需要这个检查,看是否存在零,所以我可以添加整数,如果有,如果没有零值,则停止游戏。

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

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

只要是明确的 - 你想搜索你的阵列的零值,是否正确? – aqq

+0

是的,这是正确的@aqq – Devbot10

回答

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将具有其中所有“无”被替换为“-1”和所有其他值保持相同的阵列。

已经给出这个答案,我宁愿觉得ü应以下列方式初始化您的数组:

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

正因为如此,你会避免零和完全从进入一个致命的错误状态阻止!

+0

我试图改变重复值-1,并得到这个错误“无法将类型的值‘诠释’预期参数类型‘@noescape(?智力)抛出 - >嘘’” @Karthik – Devbot10

+0

您确定您确定使用了我提供的代码,并尝试将重复值更改为-1吗? – Karthik

+0

我接受了您的建议,以改变我初始化阵列的方式。我删除了零并将其更改为-1。 – Devbot10

0

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

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

4

而不是

if smallestArr.contains(nil) { 

把这个:

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

另一种方式:

if smallestArr.flatMap{$0}.count == smallestArr.count { 
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 
} 

不过我刚看到马特:■.contents.flatMap解决方案;我相信他的回答是最好的。

相关问题