我想比较一行中的所有元素(在矩阵中)。在行或列中应该没有相同的数字。
喜欢这个
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
错误
谢谢
答案 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]
// ],
// ...
// ]