2014-10-05 58 views
1

我一直試圖遍歷數組來檢查兩次特定值出現的次數。我想出了這個代碼:遍歷數組以查找值的出現次數

var paymentNum = 0 
    var creditNum = 0 
    for index in images { 
     if images.objectAtIndex(index) == 0 { 
      paymentNum = paymentNum + 1 
     } else { 
      creditNum = creditNum + 1 
     } 
     } 

雖然這似乎並不奏效。我只是得到錯誤'AnyObject'不能轉換爲'Int'。

我哪裏錯了?

+0

圖像是具有多個屬性的對象數組嗎? – 2014-10-05 04:11:41

+0

它只包含1或0。 – user3746428 2014-10-05 04:13:12

回答

2

我正在做一些非常巨大的假設,因爲你沒有什麼事了很多細節。 我假設圖像是一個NSArray。 Objective-C中的NSArray可以快速轉換爲[AnyObject]。 當你有一對,每個款式環這樣

for value in array 
{} 

循環將遍歷數組中的每個值進行迭代。值是數組中的實際對象,而不是谷如for(int i = 0; i < 10; i++)風格環路

那麼你可能真的希望做的是

for item in images { 
    if item == 0 { 
     paymentNum++ 
    } else { 
     creditNum++ 
    } 
} 

您可能還需要從投環路[AnyObject][Int]這樣

let tmp = images as [Int] 
for item in tmp 
{...} 

或,施放值拉出陣列的這樣

for item in images { 
    if (item as Int) == 0 { 
     paymentNum++ 
    } else { 
     creditNum++ 
    } 
} 

但前者可能是可取的

1

貼INA遊樂場:

import Foundation 

let images = [1, 0, 1, 1, 0, 0, 1, 0, 1, 1] 
var paymentNum = 0 
var creditNum = 0 
for item in images { 
    println(item) 
    if item == 0 { 
     paymentNum = paymentNum + 1 

    } else { 
     creditNum = creditNum + 1 
    } 
} 

println(paymentNum) //4 
println(creditNum) //6 
+0

糾正了小錯誤 – 2014-10-05 04:21:22

1

有一種更緊湊的方式來實現,只需2行代碼。 它假定一個數組元素,如果它的值是1,那麼它是一個積分,否則就是0.

這就是說,如果總結數組的所有元素,就可以獲得積分數 - 付款數是數組大小減去信用數量。

綜上所述數組中的所有元素,最簡單的方法是使用reduce方法(詳細信息here

var creditNum = images.reduce(0, combine: { $0 + $1 }) 
var paymentNum = images.count - creditNum 

如果使用不同的值不是0或1,以確定信用和付款,則計算可進行修改,以檢查是否有明確的值如下:

var creditNum = images.reduce(0, combine: { $0 + ($1 == 1 ? 1 : 0) }) 

這需要先前計數($ 0),並加入1或0,這取決於元件陣列($ 1)是否等於1或沒有。