我知道这个问题有点老了..但我没有找到任何相关的答案,所以我创建了一个算法。
在下面的代码crossAxisCount
中,只有多少个网格水平对齐,即,在上图中的纵向视图中,我们有“2”个网格,而在横向视图中,我们有“4”个网格。
arrayLength
表示我们必须提供的网格总数才能获得该布局。
final int crossAxisCount = 2;
final int arrayLength = 8;
final List<int> output = [];
var runiCheck = 0;
for (var i = 0; i < (arrayLength/ crossAxisCount).ceil(); i++) {
var runjCheck = -1;
for(var j = i; j <= arrayLength; j+= (arrayLength / crossAxisCount).ceil()){
runiCheck++;
if((arrayLength % crossAxisCount != 0)){
if(arrayLength < runiCheck) break;
runjCheck++;
if(arrayLength % crossAxisCount < runjCheck){
j--;
}
}else{
runjCheck++;
if(runjCheck >= crossAxisCount) break;
}
output.add(j);
}
}
print(output);
输出:
[
0, 4,
1, 5,
2, 6,
3, 7
]
如果我们更改crossAxisCount
为4
和更改arrayLength
为21
(只是一个随机数。)
final int crossAxisCount = 4;
final int arrayLength = 21;
final List<int> output = [];
输出将是:
[
0, 6, 11, 16,
1, 7, 12, 17,
2, 8, 13, 18,
3, 9, 14, 19,
4, 10, 15, 20,
5
]
我知道在很长的列表/数组中使用这个算法有点贵。但这是确切的解决方案。
我是 Stack Overflow 的新手,请投票给我的答案以获得动力。