2014-09-30 105 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