

## swift

[code]

    import UIKit
    import CoreMotion
    
    class ViewController: UIViewController {
    
    @IBOutlet weak var Myaccelx: UILabel!
    @IBOutlet weak var accelxaddition: UILabel!
    
    
    let motionManager: CMMotionManager = CMMotionManager()
    var timer:NSTimer = NSTimer()
    var countArray = [String]() //配列
    var bele = 20
    var kazu = 0
    var j = 0
    var num = 0
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    
        // Initialize MotionManager
        motionManager.deviceMotionUpdateInterval = 0.05 // 20Hz
    
        // Start motion data acquisition
        motionManager.startDeviceMotionUpdatesToQueue( NSOperationQueue.currentQueue(), withHandler:{
            deviceManager, error in
            var accel: CMAcceleration = deviceManager.userAcceleration
    
            self.countArray.append("\(accel.x)")
    
            if self.countArray.count >= self.bele {
                self.countArray.removeAtIndex(0)
            }
    
            self.Myaccelx.text = ("\(self.countArray)")
    
            self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "Count", userInfo: nil, repeats: true)
        })
    }
    
    
    func Count(){
    
    
    
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
     }
    
    
    }
    
[/code]

上記のプログラムですが、Countの処理のところで配列の中の合計を計算したいです。  
1秒に２０回（0.05Hz）の加速度の計算ができるので、１秒ごとに合計値を求める処理を行いたいです。  
どのようにかけばよろしいでしょうか。


CC BY-SA 3.0
2015-08-26T09:17:38.973
14864
2015-08-27T03:53:12.157
11014
question
swift xcode
配列の中の合計を計算したい


Swiftは、配列（`Array`）について、`map`と`reduce`という関数が用意されています。  
（`filter`という関数もありますが、ここでは割愛）

[code]

    let floatArray: [Double] = [1.0, 1.1, 1.2, 1.3, 1.4, 1.5]
    
    let mapResult: [Double] = floatArray.map({(a: Double) -> Double in
        a * 2.0
    })
    
    // output: [2, 2.2, 2.4, 2.6, 2.8, 3]
    
    let reduceResult: Double = floatArray.reduce(0.0, combine: {
        (a: Double, b: Double) -> Double in
        a + b
    })
    
    // output: 7.5
    
[/code]

上のサンプルコードについて、`map`関数は、配列の全要素に`2.0`を乗算しています。  
`reduce`関数は、前回までの結果に要素の値を加算しており、全体として、全要素の加算を行っています。  
両関数について、日本語の情報をネットで多数見つけることができますから、それらで勉強してください。

ご質問に対しては、`reduce`関数が役に立つでしょう。なので、計算をする目的があるのに、わざわざ実数（Double、Floatなど）を文字列に変換するのは、無駄な処理ということができると思います。


CC BY-SA 3.0
2015-08-26T09:45:58.920
14868
2015-08-27T03:53:12.157
2015-08-27T03:53:12.157
7362
7362
14864
answer