2014-09-30 91 views
1

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

即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])]

然后反转所有ID号的顺序:

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

快乐帮,但要确保我给你正确的代码。你可以编辑你的文章,并包括一个条目和答案几个周期的例子吗? – 2014-09-30 21:51:29

+2

请将问题简化为您要求的内容而不是后面的故事。 – AlBlue 2014-09-30 21:59:08

回答

1

例如,定义一个数组扩展与返回其元素的所有配对组合的函数,然后映射在与所述计算的对要执行:

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