Swift:将字符串中以逗号分隔的数字列表安全地转换为Ints数组

时间:2016-09-20 16:01:50

标签: arrays swift swift3

我想从一个字符串创建一个整数数组[Int],该字符串应该包含一个逗号分隔的列表。

以下是一些有效的输入:

$(function () {

    var data = [];
    for (var i = 0; i < 14; i++) {
        data.push([i, Math.sin(i)]);
    }

    var options = {
        grid: {
            hoverable: true,
            autoHighlight: true
        },
        yaxis: {
            min: -1.2,
            max: 1.2
        }
    };

    var plot = $.plot("#placeholder", [data], options);

    var a = plot.getAxes().yaxis.datamin;
    alert(a);
});

以下是一些无效输入:

1
1,2,3
1,5,10

我设法为第一部分提出了一些建议,即使用以下代码将值分离出来:

[nil] // no value set
1,,2,3 // extra commas
1,Z,10 // characters other than numbers and commas

不幸的是,该代码不处理上面列出的无效输入,并且应用程序在大多数情况下都会崩溃。添加一些检查的最佳方法是什么,这样如果存在无效列表,我们只返回func get_numbers() -> Array<Int>{ return self.numbers_as_csv_string! .components(separatedBy: ",") .map { word in Int(word.trimmingCharacters(in: CharacterSet.whitespaces))! } } ?我想要最短的代码 - 正则表达式是最好的方式吗?

非常感谢提前!

3 个答案:

答案 0 :(得分:6)

使用!忽略无法转换为flatMap的组件,而不是使用Int来强制解包:

func get_numbers() -> Array<Int> {
    return self.numbers_as_csv_string!
        .components(separatedBy: ",")
        .flatMap {
            Int($0.trimmingCharacters(in: .whitespaces))
        }
}

示例结果:

1           => [1]
1,2,3       => [1,2,3]
1,5,10      => [1,5,10]

nil         => []
1,,2,3      => [1,2,3]
1,Z,10      => [1,10]

答案 1 :(得分:0)

Swift 3

Int array to String

let arjun = [1,32,45,5]
    print(self.get_numbers(array: arjun))

 func get_numbers(array:[Int]) -> String {
        let stringArray = array.flatMap { String(describing: $0) }
        return stringArray.joined(separator: ",")

String to Int Array

let arjun = "1,32,45,5"
    print(self.get_numbers(stringtext: arjun))

    func get_numbers(stringtext:String) -> [Int] {
    let StringRecordedArr = stringtext.components(separatedBy: ",")
    return StringRecordedArr.map { Int($0)!}   
}

答案 2 :(得分:0)

也许是旧式,但它适用于多种字符串

 class func parseCommaSeparatedNumbers(string: String!) -> [Int] {

    var integerArray = [Int]()
    var bufferedString = ""

    func appendConvertedNumberToIntegerArray() -> Void {
        bufferedString = bufferedString.replacingOccurrences(of: " ", with: "")
        bufferedString = bufferedString.trimmingCharacters(in: CharacterSet(charactersIn: "01234567890").inverted)
        if let integerValue = Int(bufferedString) {
            integerArray.append(integerValue)
        }
        bufferedString.removeAll()
    }

    for character in string.characters {

        if character != "," {
                bufferedString.append(character)
        }else {
            appendConvertedNumberToIntegerArray()
        }
    }

   if bufferedString != "" {
        appendConvertedNumberToIntegerArray()
    }

    return integerArray
}