【问题标题】:Create, random fill and search element on 2d array NxN Swift在二维数组 NxN Swift 上创建、随机填充和搜索元素
【发布时间】:2016-07-14 04:06:46
【问题描述】:

我创建了一个数字数组,尝试填写它们的规则或随机大小 NxN,然后查找每个对角线中的数量并推导出它。帮助理解我在 cmets 中指出的错误。我究竟做错了什么?谢谢!

func diagonals (n:Int) -> String{
        var sumFirst: Int
        var sumSecond: Int

        var multArray = Array(count: n, repeatedValue: Array(count: n, repeatedValue: 0))
                print(multArray) //create 2d array NxN with Initialisation

        for var i in multArray {
            for var k in multArray {
                multArray[i][k] = i+k // fill array elements the sum of the indices (error line) or we can fill it random, but how?
                if i==k { //check element on the main diagonal
                     sumFirst += multArray[i][k]  // do sum (error line)
                }
                if (i+k) == n  { //check element on secondary diagonal (error line)
                    sumSecond += multArray[i][k] // do sum (error line)
                }
            }
        }

        return "Sum elemets on main diagonal =\(sumFirst) and second =\(sumSecond)"
    }

    diagonals(3)

【问题讨论】:

  • 错误显示error: cannot subscript a value of type 'Array<[Int]>' (aka 'Array<Array<Int>>') with an index of type 'Array<Int>',因为ikelements -> (arrays) 在您的multArray,因此您不能将数组分配给Int,以更接近您的目标使用enumerate() method 来获取数组的索引,就像for (indexI, elementI) in multArray.enumerate()and 也为你的第二个在for (indexK, elementK) in multArray.enumerate()
  • @ronatory 谢谢你,朋友!我更正并在回复中写下了决定。
  • 不客气,但我也建议 Sulthan 在您的决定中给出提示

标签: arrays swift multidimensional-array random


【解决方案1】:

解决了!

    func diagonals (n:Int) -> String{
    var sumFirst = 0
    var sumSecond = 0

    var multArray = Array(count: n, repeatedValue: Array(count: n, repeatedValue: 0))
            print(multArray) //create 2d array NxN with Initialisation

    for indexI in multArray.indices {
        for indexK in multArray.indices {
            multArray[indexI][indexK] = Int(arc4random_uniform(UInt32(n))) // fill array elements randomly
            if indexI==indexK { //check element on the main diagonal
                 sumFirst += multArray[indexI][indexK]  // do sum
            }
            if (indexI+indexK + 1) == n  { //check element on secondary diagonal
                sumSecond += multArray[indexI][indexK] // do sum
            }
        }
    }
print(multArray)
    return "Sum elemets on main diagonal =\(sumFirst) and second =\(sumSecond)"
}

diagonals(3)

【讨论】:

  • 您可能只想使用for indexI in multArray.indices {for index in 0..<n { 而不是(indexI, _) in multArray.enumerate()
  • 1) 对于方法for indexI in multArray.indices { 我可以在一行中扫描两个索引吗?例如for (indexI, indexK) in multArray.indices { 2) 方法for index in 0..<n { 编译器将如何看到我们的索引正是数组的索引? @Sulthan
  • 不容易,但您可以遍历一个索引并将其转换为两个索引。类似于let indices = (0..<(n * n)).map { ($0 / n, $0 % n) } 然后for (row, column) in indices {。但是请注意,如果与大数据一起使用,那里的划分会影响性能。
  • 是的……那不好……那么第二个问题呢?@Sulthan
  • 我不明白你的问题。编译器不检查整数索引。
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 2012-07-27
  • 2014-05-10
  • 1970-01-01
  • 2011-01-30
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多