2012-05-16 129 views
2

我有7組數據可以通過索引0-6訪問。我需要使用6進行訓練,1進行測試,需要進行循環,直到7種組合得到滿足爲止。循環索引

培訓 - 0,1,2,3,4,5 測試 - 6

訓練 - 1,2,3,4,5,6 測試 - 0

培訓 - 2, 3,4,5,6,0 測試 - 1

....

培訓6,0,1,2,3,4, 測試 - 5

訓練數據將是一個整數隊列隊列,測試是一個整數隊列。我的大腦被炸,我需要拼命幫忙。我採取了簡單的硬編碼方式,但它看起來很可怕,如果我想改變設置的數量,那麼就需要重寫。

大量使用模答案的!我只使用了尋找偶數:)現在我測試,如果它的工作原理所有剛開upvotes

很多偉大的答案的!你們是最棒的! :D

+0

@rflood請使用單詞「弱智」這樣的剋制。除非你有患有精神發育遲緩的朋友或家人,否則這是非常冒犯的,在這種情況下,你的精神能力無論如何都是完全不相干的。 – Crisfole

+0

我對你的問題還有點不清楚,即你想使用的語言 - 是C#,Java還是C++?雖然所有三個都可以有*類似的解決方案路徑,但如果您正在尋找Queue/OO結構,它們會有很大的不同。 – Makoto

+0

有什麼限制?你只需要使用隊列操作? –

回答

2

Modulo是你的朋友在這裏。

for(int i = 0; i < set.Length; i++) 
{ 
    for(int j = 0; j < set.Length - 1; j++) 
    { 
     // Do something with ... set[(i+j)%set.Length]; 
    } 
    // Test with set[(i+set.Length-1)%set.Length] 
} 
1

一個簡單的模數操作將剪切這些值。

for i in range(7): 
    v = range(i, i+7) 
    print [x % 7 for x in v[:-1]], v[-1] % 7 
1

與僞C#語法:

int[][] alldata = [[/* training1 */], [ /*training2*/ ], [ /* training3 */ ]]; 
for (int i = 0; i < alldata.Length; i++) 
{ 
    int[][] testdata = new int[][] { alldata[i] }; 
    int[][] traindata = alldata.Where((d, idx) => idx != i).ToArray(); 
    //Do your thing. 
} 
1

我不知道如果我得到你的數據集的權利,但是這是你在找什麼?

Queue<Int>[] data = new Queue<Int>[7](); 
int current; 
for(int i=0; i<7; i++) { 
    current = i; 
    for(int j=0; j<6; j++) { 
     training[i].add(data[(current + j)%7]); 
     current++; 
    } 
    testing[i] = data[(current + 6)%7]; 
} 
1

這裏是我會怎麼解決這個問題:

void IndicesCycling(int[] indexes, out Queue<Queue<int>> data, out Queue<int> test) 
{ 
    data = new Queue<Queue<int>>(); 
    test = new Queue<int>(); 
    for (int i = 0; i < indexes.Length; i++) 
    { 
     test.Enqueue(indexes[i]); 
     Queue<int> tmp = new Queue<int>(); 
     for (int j = 1; j < indexes.Length; j++) 
     { 
      tmp.Enqueue(indexes[(i+j)%indexes.Length]); 
     } 
     data.Enqueue(tmp); 
    } 
}