我很难找到一种方法来同时移动2D数组3项,主要是因为它必须以特定的方式完成。
数组本身具有列的行和列的个体。我必须一次带2个人,并将它们与每三个人进行比较直到结束:
locus1 locus2 locus3 ...
0 1 2 3 4 5
0 1 2 3 4 5 6
1 7 8 9 10 11 12
2 13 14 15 16 17 18
3 19 20 21 22 23 24
4 25 26 27 28 29 30
As a definite example of what I mean, say I have the first set: 0,1,2.
The first comparison would be of the alleles: 1,2, 7,8 and 13, 14.
The next comparison would be of the alleles: 3,4, 9,10 and 15,16.
The last (assuming three loci) would be: 5,6, 11,12, and 17,18.
对于这些比较中的每一个,我必须比较每个基因座的等位基因(每列代表一个等位基因,因此两列是一个基因座)。所以它看起来像这样
for each pair of individuals (i,j)
for each locus l
for each individual k, not i or j
if comparison test works
great
else
better luck next time
对于每组6个等位基因,我必须进行比较。我已经完成了比较测试的代码。我只是不确定如何正确循环这个2D数组。我在想的是像这样的伪代码:
.btn-3da:after {
z-index:1;
}
.btn-3da:hover {
position:relative;
z-index:2;
}
我不想直接回答。我只想指导如何解决这个问题,以保持阵列边界。我之前没有做过这样的搜索。
我感谢任何帮助!谢谢:))
答案 0 :(得分:0)
我能想到有两种方法可以做到这一点。这些天,我们有经典的外部迭代,以及更现代(但略有限制)的内部流迭代。我会告诉你们两个。
我假设您的集合/数组属于Allele
类型且名为alleles
,但这完全是任意的。
对于外部迭代,它将是这样的:
for(Allele i : alleles) {
for(Allele j : alleles) {
if(i == j) continue;
for(Allele k : alleles) {
if(i == j || i == k) continue;
doComparison(i, j, k);
}
}
}
基本上,在进入下一个循环之前测试等效性,如果找到,则跳到下一个条目。
对于内部迭代(功能/流),它将是这样的
alleles.stream().forEach(i ->
alleles.stream().filter(j -> i != j).forEach(j ->
alleles.stream().filter(k -> k != i && k != j).forEach(k ->
doComparison(i, j, k)
)
)
);
在这种情况下,它可能会更有效,因为filter(…)
方法在开始迭代之前消除了每个潜在的冲突。但是,如果你处理超过三个,你可能必须聪明地进行迭代。
希望能做到这一点。祝你好运!