Swift 3.0:比较矩阵中的元素行

时间:2017-02-02 00:06:52

标签: swift swift3

我想比较一行中的所有元素(在矩阵中)。在行或列中应该没有相同的数字。

喜欢这个

for i in matri{
  if (matrix[0][0] == matrix[0][1]{
    print ("error: equal number")
  }else{
  print ("OK")
 }
}

但是这只比较了第一个值和下一个索引号。我怎么解决这个问题?我需要比较每一行和每一列

 1-1-3-6-4

错误:

1-3-4-5-6
1-5-3-9-4

错误

谢谢

2 个答案:

答案 0 :(得分:2)

给定矩阵

let matrix = [[1, 1, 3, 6, 4], [1, 3, 4, 5, 6], [1, 5, 3, 9, 4]]

您只需编写

即可找到包含重复项的行
let rowsWithDuplicates = matrix.filter { Set($0).count != $0.count }

最后打印重复项

for row in rowsWithDuplicates {
    print("Found a duplicate in \(row)")
}

答案 1 :(得分:1)

这是一个方法,如果在同一行/列中找到两个相等的数字,则返回false。

func test(matrix: [[Int]]) -> Bool {
    for (i, row) in matrix.enumerated() {
        for (j, value) in row.enumerated() {
            for (k, _value) in row.enumerated() where j != k {
                if _value == value {
                    return false
                }
            }
            for (l, _row) in matrix.enumerated() where l != i {
                if _row[j] == value {
                    return false
                }
            }
        }
    }
    return true
}

此方法将生成具有给定维度的随机矩阵。

func generate(matrix m: Int, by n: Int) -> [[Int]] {

    var matrix = [[Int]]()

    for i in 0..<m {
        matrix.append([Int]())
        for _ in 0..<n {
            matrix[i].append(Int(arc4random_uniform(11)))
        }
    }

    return matrix
}

最后,这将测试给定数量的矩阵的有效性并返回所有有效矩阵。

func valid(matrices count: Int, ofSize size: (Int, Int) -> [[[Int]]] {

    var matrices = [[[Int]]]()

    for _ in 0 ..< tries {
        let matrix = generate(matrix: size.0, by: size.1)
        if test(matrix: matrix) {
            matrices.append(matrix)
        }
    }

    return matrices
}

最后,打印出结果将为我们提供所有有效的随机排列。

print(valid(matrices: 100, ofSize: (5, 2)))

//  [
//      [
//          [2, 0],
//          [7, 8],
//          [3, 5],
//          [9, 1],
//          [4, 2]
//      ],
//      [
//          [9, 3],
//          [7, 8],
//          [5, 0],
//          [2, 5],
//          [6, 4]
//      ],
//      ...
//  ]