使用浮点数遍历二维数组时出错

Posted

技术标签:

【中文标题】使用浮点数遍历二维数组时出错【英文标题】:Having Error While iterate through 2D Array using Float 【发布时间】:2017-06-12 06:25:10 【问题描述】:

我正在使用二维数组来存储所有坐标,我想将每个坐标分配给 CGPoint 函数,但出现此错误:

不能为 inout[[Float]] 类型的值下标

以下是我的代码:

        var entryPoint: [[Float]] = [[130.6,52.3],[167.5,52.1],[204.5,51.91],[243.6,48.91],[281.16,48.75],[167.5,67.41],[204.5,67.91],[243.6,68.5],[281.16,69.16]]

        for var x in 0..<entryPoint.count
        
            for var y in 0..<entryPoint[x].count
            
                print(entryPoint[x][y])
                let circlePath = UIBezierPath(arcCenter: CGPoint(x: entryPoint[x][y],y: entryPoint[x][y]), radius: CGFloat(0.5), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
                let shapeLayer = CAShapeLayer()
                shapeLayer.path = circlePath.cgPath
                shapeLayer.fillColor = UIColor.red.cgColor
                shapeLayer.strokeColor = UIColor.red.cgColor
                shapeLayer.lineWidth = 0.8
            
        

【问题讨论】:

【参考方案1】:

只需将类型 Float 更改为 CGFloat

var entryPoint: [[CGFloat]] = [[130.6,52.3],[167.5,52.1],[204.5,51.91],[243.6,48.91],[281.16,48.75],[167.5,67.41],[204.5,67.91],[243.6,68.5],[281.16,69.16]]

另外,你可以这样迭代:

for (index,value) in entryPoint.enumerated()
    print("Zero",value[0])
    print("One",value[1])

【讨论】:

【参考方案2】:

错误具有误导性的问题是 CGPoint(x:y:) 需要 CGFloat 作为参数,而您当前正在传递 Float 值,将 Float 转换为 CGFloat 将减少该错误。

var entryPoint: [[Float]] = [[130.6,52.3],[167.5,52.1],[204.5,51.91],[243.6,48.91],[281.16,48.75],[167.5,67.41],[204.5,67.91],[243.6,68.5],[281.16,69.16]]
for entry in Array(entryPoint.dropFirst()) 
        print(entry[0])
        print(entry[1])
        let circlePath = UIBezierPath(arcCenter: CGPoint(x: CGFloat(entry[0]),y: CGFloat(entry[1]), radius: CGFloat(0.5), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = circlePath.cgPath
        shapeLayer.fillColor = UIColor.red.cgColor
        shapeLayer.strokeColor = UIColor.red.cgColor
        shapeLayer.lineWidth = 0.8
    

注意:您还可以创建[[CGFloat]] 类型的数组,而不是[[Float]],这也将消除此错误。

【讨论】:

我已将数组类型更改为 CGFLoat 并修复了错误...但是当我分配值时,为什么 CGPoint X 和 Y 值相同? @NgHsiaoQin 检查编辑的答案,你不需要第二个 for 循环 @NiravD 不要强行支持你的答案,也不要在你的修改中复制我的答案。 @SalmanGhumsani 我没有强行投票,答案已经投票了我还没有复制你的答案,你正在循环使用enumerated,这是不必要的,因为你甚至没有使用索引我也可以说你复制我的答案,因为在你发布答案之前我已经建议了我的笔记中的数组更改 我花了 3 分钟来写我的答案,但我不是你的副本看到我的回答。

以上是关于使用浮点数遍历二维数组时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 C/C++ 中传递二维数组时出错

使用 c# 访问二维数组时出错

C++:使用函数为二维数组分配内存时出错

Java浮点数转人民币读法

将两列文本文件中的浮点数读入Python中的数组时出错

Java浮点数转人民币读法