对数组索引的操作

时间:2014-09-30 21:45:55

标签: swift ios8 xcode6

我是应用程序开发的新手,需要一些简单的逻辑帮助。我有一个浮点值数组。计算涉及阵列中的两个条目,但需要重复,直到计算出每个可能的条目组合。

即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

1 个答案:

答案 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