gpt4 book ai didi

swift - 如何使用 swift 将变量数组分成更小的数组

转载 作者:行者123 更新时间:2023-11-30 12:33:49 27 4
gpt4 key购买 nike

我有个问题想不明白。有没有更简单的方法将一个数组分成其他数组。在下面的代码中,我执行跟踪路由并过滤掉除 ping 速率之外的所有内容。

然后我将该数组分解为单独的节点。唯一的缺点是,如果只需要 2 跳,那么我会收到错误“ fatal error :索引超出范围”。因为我将其设置为创建 15 个节点数组。我也尝试过放..

let count = pingRate.count
if count < 15 {
aNodeArray += pingRate[14]
}

有没有更简单的方法?我希望有一种方法可以执行 .count 然后填充每个节点上所需的 Int 。

let task = Process()
task.launchPath = "/bin/sh"
task.arguments = ["-c", "traceroute -nm 15 -q 1 8.8.8.8"]

let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String
var array = output.components(separatedBy: " ")

array = array.filter({ $0.contains(".")})
let pingRate: [[Double]] = array.enumerated().filter({ index, _ in
index % 2 != 0
}).map { [Double($0.1)!] }
let aNode = pingRate[0]
let bNode = pingRate[1]
let cNode = pingRate[2]
let dNode = pingRate[3]
let eNode = pingRate[4]

aNodeArray += aNode
bNodeArray += bNode
cNodeArray += cNode
dNodeArray += dNode
eNodeArray += eNode

完成后,我会排序并找到最小值、最大值和平均值。

    let sorted = aNodeArray.sorted()
let numbers = sorted
print(numbers)
let min = numbers[0]

var sum = 0 as Double
for number in numbers {
sum += number
}
let mean = Double(sum) /
Double (numbers.count)
let x = mean
let avg = round(1000.0 * x) / 1000.0
let maxBR = numbers.last! as Double
let max = round(1000.0 * maxBR) / 1000.0

print(min)
print(max)
print(avg)

编辑

我确实偶然发现了一些 block 并大步从...... Swift: what is the right way to split up a [String] resulting in a [[String]] with a given subarray size?

我正在尝试找到一种方法来实现我的需求

编辑

然后查看该代码。谁能告诉我为什么在 process() 完成之前我会得到彩色旋转轮?

最佳答案

我知道有更有效的算法来计算 ping 速率统计数据,但下面的代码应该可以完成这项工作。

let task = Process()
task.launchPath = "/bin/sh"
task.arguments = ["-c", "traceroute -nm 15 -q 1 8.8.8.8"]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()

let data = pipe.fileHandleForReading.readDataToEndOfFile()
guard
let pingRates = String(data: data, encoding: .utf8)?
.components(separatedBy: " ")
.filter({ $0.contains(".") })
.flatMap({ Double($0) }),
pingRates.count > 0
else {
return
}
print("ping rate(min) = \(pingRates.min()!.rounded())")
print("ping rate(max) = \(pingRates.max()!.rounded())")
print("ping rate(avg) = \((pingRates.reduce(0, +) / Double(pingRates.count)).rounded())")

消除输出中 IP 地址的技巧是让 Double.init 在它们上失败,然后 flatMap 将删除这些 nil 值。

关于swift - 如何使用 swift 将变量数组分成更小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43127786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com