我是应用程序开发的新手,需要一些简单的逻辑帮助。我有一个浮点值数组。计算涉及阵列中的两个条目,但需要重复,直到计算出每个可能的条目组合。
即x =(2 * entry2)-entry1
显然,我引用这些条目的唯一方法是使用索引号。所以我假设x =(2 * array [id + 1]) - array [id]
但是我的序列需要向下执行第二个数组id,并且一旦达到0,则递增两个数组ID +1并重复该过程,直到第一个ID达到最大ID号。 或者我是以错误的方式解决这个问题。任何帮助将不胜感激。
目前我有RFArray,我想填充IMProdArray所以我的代码将是:
IMProdArray+=[2*(RFArray[2])-(RFArray[1])]
但是我需要一个循环来重复这个,以便在数组中对所有可能的ID号组合。
所以如果我在数组中有4个条目:
IMProdArray + = [2 *(RFArray [3]) - (RFArray [2])]
IMProdArray + = [2 *(RFArray [3]) - (RFArray [1])]
IMProdArray + = [2 *(RFArray [3]) - (RFArray [0])]
IMProdArray + = [2 *(RFArray [2]) - (RFArray [1])]
IMProdArray + = [2 *(RFArray [2]) - (RFArray [0])]
IMProdArray + = [2 *(RFArray [1]) - (RFArray [0])]
然后反过来所有身份证号码的顺序:
IMProdArray+=[2*(RFArray[2])-(RFArray[3])]
IMProdArray+=[2*(RFArray[1])-(RFArray[3])]
IMProdArray+=[2*(RFArray[0])-(RFArray[3])]
IMProdArray+=[2*(RFArray[1])-(RFArray[2])]
IMProdArray+=[2*(RFArray[0])-(RFArray[2])]
IMProdArray+=[2*(RFArray[0])-(RFArray[1])]
谢谢,
SAMP
答案 0 :(得分:1)
例如,使用一个函数定义一个Array扩展,该函数返回其元素的所有成对组合,然后使用您希望执行的计算映射成对:
extension Array {
func pairs() -> [(T, T)] {
// you can take this nested func out for reuse
func reverseIndexPairs(var count n: Int) -> [(Int, Int)] {
assert(n >= 0)
var ps = [(Int, Int)]()
for e1 in stride(from: n-1, through: 0, by: -1) {
n--
for e2 in stride(from: n-1, through: 0, by: -1) {
ps.append((e1, e2))
}
}
return ps
}
return reverseIndexPairs(count: self.count).map {
(self[$0.0], self[$0.1])
}
}
}
let arr: [Double] = [0,1,2,3]
println("test order: ")
for e in [0,1,2,3].pairs() {
println(e)
}
println("\nresult array <- 2 * x - y:")
let resultArray = arr.pairs().map { x, y in 2 * x - y }
for e in resultArray {
println(e)
}
println("\nresult array <- 2 * y - x:")
let resultReverse = arr.pairs().map { x, y in 2 * y - x }
for e in resultReverse {
println(e)
}
如果我理解你是对的,你希望对的顺序相反,所以上面的代码打印出来:
test order:
(3, 2)
(3, 1)
(3, 0)
(2, 1)
(2, 0)
(1, 0)
result array <- 2 * x - y:
4.0
5.0
6.0
3.0
4.0
2.0
result array <- 2 * y - x:
1.0
-1.0
-3.0
0.0
-2.0
-1.0