arrays - 如何在 Swift 4 中将金字塔类型的字符串转换为 double 组

标签 arrays swift string algorithm double

我需要通读下面给出的字符串,这样我就会得到这个字符串中用行分隔的 double 组,所以每一行都是不同的 double 组。

var sampleString = """
                     55
                    94 48
                   95 30 96
                 77 71 26 67
                97 13 76 38 45
              07 36 79 16 37 68
             48 07 09 18 70 26 06
           18 72 79 46 59 79 29 90
          20 76 87 11 32 07 07 49 18
        27 83 58 35 71 11 25 57 29 85
       14 64 36 96 27 11 58 56 92 18 55
     02 90 03 60 48 49 41 46 33 36 47 23
    92 50 48 02 36 59 42 79 72 20 82 77 42
  56 78 38 80 39 75 02 71 66 66 01 03 55 72
 44 25 67 84 71 67 11 61 40 57 58 89 40 56 36
85 32 25 85 57 48 84 35 47 62 17 01 01 99 89 52
06 71 28 75 94 48 37 10 23 51 06 48 53 18 74 98 15
27 02 92 23 08 71 76 84 15 52 92 63 81 10 44 10 69 93
"""

例如:第一个数组 = [55],第二个数组 = [94, 48] 等等。

我知道有类似的问题,我尝试了字符串方法,如:replacingOccurances(of:with:)、trimmingCharacters(in:)、split(seperator:) 等等,我首先尝试了这样的方法:

let lineSeperatedString = sampleString.replacingOccurrences(of: "\n", with: ",")

    let whiteSpaceTrimmedString = lineSeperatedString.replacingOccurrences(of: "  ", with: "")

    print(whiteSpaceTrimmedString)

然后输出是这样的:

 55,94 48, 95 30 96, 77 71 26 67,97 13 76 38 45,07 36 79 16 37 68, 48 07 09 18 70 26 06, 18 72 79 46 59 79 29 90,20 76 87 11 32 07 07 49 18,27 83 58 35 71 11 25 57 29 85, 14 64 36 96 27 11 58 56 92 18 55, 02 90 03 60 48 49 41 46 33 36 47 23,92 50 48 02 36 59 42 79 72 20 82 77 42,56 78 38 80 39 75 02 71 66 66 01 03 55 72, 44 25 67 84 71 67 11 61 40 57 58 89 40 56 36, 85 32 25 85 57 48 84 35 47 62 17 01 01 99 89 52,06 71 28 75 94 48 37 10 23 51 06 48 53 18 74 98 15,27 02 92 23 08 71 76 84 15 52 92 63 81 10 44 10 69 93

足够接近 :( 如果你忽略每个部分开头的一些空格,用逗号分隔

然后我尝试了类似下面的方法,以便我可以将它们转换为 Ints,但后来它失败了,并将每个数字转换为 int 本身;

let myUpdatedArray = whiteSpaceTrimmedString.split(separator: "\n")
    for i in myUpdatedArray {
        let temp = i.map{String($0)}
        for j in temp {
            if let myInt = Int(j) {
                print(myInt)
            }
        }

    }

抱歉,它有点太长了,但我想展示我尝试过的一切,但我自己无法弄明白

最佳答案

你可以使用

  • components(separatedBy: .newlines) 将字符串分隔成 行,
  • map 将行映射到(外部)数组,
  • components(separatedBy: .whitespaces) 将每一行分隔成 单独的号码,
  • compactMap(Double.init) 将一行中的数字转换为 Double 的(内部)数组(忽略无效的 float )。

综合:

import Foundation

var sampleString = """
55
94 48
95 30 96
"""

let values = sampleString.components(separatedBy: .newlines).map {
    $0.components(separatedBy: .whitespaces).compactMap(Double.init)
}

print(values) // [[55.0], [94.0, 48.0], [95.0, 30.0, 96.0]]

关于arrays - 如何在 Swift 4 中将金字塔类型的字符串转换为 double 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50134075/

相关文章:

objective-c - Xcode 符号导航器不显示应用程序符号

ios - 类型 '[AnyHashable : Any]?' 没有下标成员 - 使用 Moltin API

c - 运行C程序时出错

c - 为什么有些字符会改变?

java - 确保字符串不超过给定长度的优雅方法

c++ - 为什么编译器不在参数中传递数组 char *arr[] 的大小?

c - 如何在循环中使用scanf使用C中的指针将字符保存在数组中

javascript - 如何修复 Javascript 中的 'Array.push is not a function' 错误

C 数组参数名称

ios - 如何在 Swift 中更改 PFUser 密码?