2015-12-23 261 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解決方案;我相信他的回答是最好的。

相關問題