Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 查找其和等于给定和的所有唯一对_Arrays_Swift_Sorting - Fatal编程技术网

Arrays 查找其和等于给定和的所有唯一对

Arrays 查找其和等于给定和的所有唯一对,arrays,swift,sorting,Arrays,Swift,Sorting,我想找到所有的唯一对,它们的和等于给定的和。我实现了一个解决方案,但它只返回找到的第一对 func checkPairs(in numbers: [Int], forSum target: Int) -> String { for (i, x) in numbers.enumerated() { for y in numbers[i+1 ..< numbers.count] { if x + y == target {

我想找到所有的唯一对,它们的和等于给定的和。我实现了一个解决方案,但它只返回找到的第一对

func checkPairs(in numbers: [Int], forSum target: Int) -> String {    
    for (i, x) in numbers.enumerated() {
        for y in numbers[i+1 ..< numbers.count] {
            if x + y == target {
                return ("There is a pair that sums \(target): \(x)+\(y)=\(target)")
            }
        }
    }
    return "no pair"
}

print (checkPairs(in: [1, 2, 4, 4, 7, 5, 3], forSum: 8))

找到第一对后,通过调用
return
提前退出函数。相反,您应该返回包含对的元组数组,遍历所有对,并将满足要求的元组添加到返回数组中

func checkPairs(in numbers: [Int], forSum target: Int) -> [(Int,Int)] {
    var pairs = [(Int,Int)]()
    for (i, x) in numbers.enumerated() {
        for y in numbers[i+1 ..< numbers.count] {
            if x + y == target {
                pairs.append((x,y))
            }
        }
    }
    return pairs
}

print(checkPairs(in: [1, 2, 4, 4, 7, 5, 3], forSum: 8))
输出:

There is a pair that sums 8: 1+7=8
[(4,4)、(3,5)、(1,7)]

[(4,4)、(3,5)、(1,7)]


这里是你可以做的选择之一

    let array = [1, 2, 4, 4, 7, 5, 3]
let target = 8


func checkPairs(in numbers: [Int], forSum target: Int) -> String {
    var pairs = ""
    for (i, x) in numbers.enumerated() {
        for y in numbers[i+1 ..< numbers.count] {
            if x + y == target {
                pairs += ("There is a pair that sums \(target): \(x)+\(y)=\(target)\n")
            }
        }
    }
    return pairs
}

print(checkPairs(in: array, forSum: target))
let array=[1,2,4,4,7,5,3]
让目标=8
func检查对(数字:[Int],用于sum目标:Int)->String{
var pairs=“”
对于(i,x)的数字。枚举(){
对于y,数字为[i+1..<数字.计数]{
如果x+y==目标{
成对+=(“有一对求和\(目标):\(x)+\(y)=\(目标)\n”)
}
}
}
返回对
}
打印(检查对(in:array,forSum:target))
输出将是有一对求和8:1+7=8有一对 求和8:4+4=8有一对求和8:5+3=8


您可以对单个值返回
。相反,使用数组保存所有“有效”的对,在需要时追加一个新对并返回它?@Larme使用while循环打印所有对的和8是否好?您的代码:)返回一个带有该格式的
字符串是一个非常糟糕的主意。如果你以后需要它进行进一步的处理,那么解析它是非常困难的,而且由于字符串中有大量重复信息,仅仅读取字符串也是非常糟糕的。也许他想在标签中这样显示它,那么你的标签很难显示,这就是为什么我说这是一个选项之一,取决于他想做什么我们正在寻找唯一的对,那么这对如下数组不起作用:
[1,2,4,4,7,5,3,4,1]
@Carpsen90你完全正确,更新了我的答案
    let array = [1, 2, 4, 4, 7, 5, 3]
let target = 8


func checkPairs(in numbers: [Int], forSum target: Int) -> String {
    var pairs = ""
    for (i, x) in numbers.enumerated() {
        for y in numbers[i+1 ..< numbers.count] {
            if x + y == target {
                pairs += ("There is a pair that sums \(target): \(x)+\(y)=\(target)\n")
            }
        }
    }
    return pairs
}

print(checkPairs(in: array, forSum: target))