【问题标题】:Converting a String to an Int Array [duplicate]将字符串转换为 Int 数组
【发布时间】:2016-08-14 10:08:45
【问题描述】:

例如,我有那种类型的字符串:

var test:String = "[1, 0, 4]";

我需要将它转换为 Int 数组:

var testConverted:[Int] = [ 1, 0, 4 ];

【问题讨论】:

  • 你可以跳过修剪和其他东西,像这样let testConverted = test.characters.flatMap({String($0)}).flatMap({Int($0)})
  • @Whirlwind 这很简洁,但假设是个位数,这可能不是 OP 想要的。例如"[10, 50, 40]" 转到[1, 0, 5, 0, 4, 0]。虽然我认为没有理由在那里使用两次flatMap,但您可以使用let testConverted = test.characters.flatMap{Int(String($0))}
  • @originaluser2 你说得对,谢谢,我很仓促,并没有考虑多位数字,而是专注于 OP 的示例。

标签: ios arrays string swift int


【解决方案1】:

您需要使用stringByTrimmingCharactersInSet 修剪开始和结束括号,然后使用componentsSeparatedByString 获取字符串元素数组。然后你终于可以使用flatMap 来创建一个整数数组了。

例如:

let yourString = "[1, 0, 4]"

// trim off the start and end brackets of the string – then obtain an array of elements by using componentsSeparatedByString
let arrayOfStrings = yourString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "[]")).componentsSeparatedByString(", ")

// flatMap the arrayOfStrings to an array of integers, filtering out any strings that cannot be represented as numbers
let arrayOfInts = arrayOfStrings.flatMap{Int($0)}
print(arrayOfInts)

【讨论】:

    【解决方案2】:

    试试这个:

    var test = "[1, 0, 4]"
    
    test = test.substringToIndex(test.endIndex.advancedBy(-1)).substringFromIndex(test.startIndex.advancedBy(1))
    var result = test.componentsSeparatedByString(", ").flatMap {Int($0)}
    print(result) // [1, 0, 4]
    

    【讨论】:

    • flatMap 会比在map 中强制解开Int? 要好得多;) 这样您就可以过滤掉任何不能以数字表示的元素而不会崩溃。跨度>
    • 感谢您的建议:D.
    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多