web-dev-qa-db-ja.com

文字列をIntに変換し、コンマをプラス記号に置き換えます

Swiftを使用して、アプリのテキストビューに入力された数値のリストを取得し、成績計算機の各数値を抽出してこのリストの合計を作成しようとしています。また、ユーザーが入力する値の量は毎回変化します。以下に例を示します。

文字列:98,99,97,96 ...取得しようとしています:98 + 99 + 97 + 96 ...

助けてください!ありがとう

28
Chris
  1. components(separatedBy:)を使用して、コンマ区切りの文字列を分割します。
  2. trimmingCharacters(in:)を使用して、各要素の前後のスペースを削除します
  3. Int()を使用して、各要素を整数に変換します。
  4. compactMap(以前はflatMapと呼ばれていました)を使用して、Intに変換できなかったアイテムを削除します。
  5. reduceを使用して、Intの配列を合計します。

    let input = " 98 ,99 , 97, 96 "
    
    let values = input.components(separatedBy: ",").compactMap { Int($0.trimmingCharacters(in: .whitespaces)) }
    let sum = values.reduce(0, +)
    print(sum)  // 390
    
61
vacawama

SwiftおよびSwift 4の場合。

簡単な方法:ハードコードされています。計算される整数の正確な量がわかっていて、さらに計算して印刷/使用したい場合にのみ役立ちます。

let string98: String = "98"
let string99: String = "99"
let string100: String = "100"
let string101: String = "101"

let int98: Int = Int(string98)!
let int99: Int = Int(string99)!
let int100: Int = Int(string100)!
let int101: Int = Int(string101)!

// optional chaining (if or guard) instead of "!" recommended. therefore option b is better

let finalInt: Int = int98 + int99 + int100 + int101

print(finalInt) // prints Optional(398) (optional)

関数としての派手な方法:一般的な方法。ここでは、最後に必要な数の文字列を入力できます。たとえば、最初にすべての文字列を収集してから、配列を使用して計算することができます。

func getCalculatedIntegerFrom(strings: [String]) -> Int {

    var result = Int()

    for element in strings {

        guard let int = Int(element) else {
            break // or return nil
            // break instead of return, returns Integer of all 
            // the values it was able to turn into Integer
            // so even if there is a String f.e. "123S", it would
            // still return an Integer instead of nil
            // if you want to use return, you have to set "-> Int?" as optional
        }

        result = result + int

    }

    return result

}

let arrayOfStrings = ["98", "99", "100", "101"]

let result = getCalculatedIntegerFrom(strings: arrayOfStrings)

print(result) // prints 398 (non-optional)

29
David Seek

let myString = "556" let myInt = Int(myString)

5
neha