2012-05-16 52 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); 
    } 
}