2017-01-23 3 views
2

によってアレイの上:[1, 2, 3, 4, 5, 6...100]繰り返し処理は、私は、アレイ持っ範囲

を私は具体的には、5によってこの配列を反復するために探しています:

は、配列の最初の5つの数字を取り、平均、移動を取得します次の5つの数字に移動して平均をとるなど。

私はDequeueやループのような多くの方法を試しましたが、結果を得ることができませんでした。

+0

使用をこれを計算し、平均を計算するhttps://gist.github.com/ericdke/fa262bdece59ff786fcb – xmhafiz

+1

希望の結果は何ですか?平均の配列? – matt

答えて

0

をあなたが数えるその後、サブ要素による合計を分割するサブシーケンスを合計する減らす各5要素を反復処理するために進行ループを使用して使用する必要があります。

let sequence = Array(1...100) 
var results: [Double] = [] 

for idx in stride(from: sequence.indices.lowerBound, to: sequence.indices.upperBound, by: 5) { 
    let subsequence = sequence[idx..<min(idx.advanced(by: 5), sequence.count)] 
    let average = Double(subsequence.reduce(0, +))/Double(subsequence.count) 
    results.append(average) 
} 
results // [3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, 73, 78, 83, 88, 93, 98] 
0

これを試してみてください:

extension Array { 
    // Use this extension method to get subArray [[1,2,3,4,5], [6,7,8,9,10],...] 
    func chunk(_ chunkSize: Int) -> [[Element]] { 
     return stride(from: 0, to: self.count, by: chunkSize).map({ (startIndex) -> [Element] in 
      let endIndex = (startIndex.advanced(by: chunkSize) > self.count) ? self.count-startIndex : chunkSize 
      return Array(self[startIndex..<startIndex.advanced(by: endIndex)]) 
     }) 
    } 
} 

let arr = Array(1...100) 

var result: [Double] = [] 

for subArr in arr.chunk(5) { 
    result.append(subArr.reduce(0.0) {$0 + Double($1)/Double(subArr.count)}) // Use reduce to calculate avarage of numbers in subarray. 
} 

result // [3.0, 7.9999999999999991, 13.0, 18.0, 23.0, 28.000000000000004, 33.0, 38.0, 43.0, 48.0, 53.0, 58.0, 63.0, 68.0, 73.0, 78.0, 83.0, 88.0, 93.0, 98.0] 
関連する問題