我有一个列表,包含字母表。
当使用 foreach 输出时,我目前会收到这样的结果:
- A B C
- D E F
- GH我
我想实现的是这个
- ADG
- B E H
- C F I
我尝试了以下方法,但实际上,我没有发现它是一个好的或稳定的解决方案 - 并且字母/索引出现了两次。
@{
var ie = 0;
int sortI = 0;
}
int columns = 3;
int dictLength = ToShow.Count();
int rows = dictLength/columns;
int sortS = 1;
List<int> hasKey = new List<int>();
var newDict = new Dictionary<string, List<LoopItem> >();
if( sort.Equals("alphabetically") )
{
while( sortI <= rows )
{
<text>Column @( ToShow.Keys.ElementAt(sortI) ) - </text>
while( sortS <= ( columns ) )
{
int index = (( sortS * columns ) + sortI); //(( sortS * columns ) + ( 1 + sortI ));
if( hasKey.Contains(index) ) { continue; } else
{
<text>Column @( ToShow.Keys.ElementAt(index) ) - </text>
sortS++;
hasKey.Add(index);
}
}
<text><br /></text>
sortS = 1;
sortI++;
}
sortS = 1;
sortI = 1;
<text><hr /></text>
foreach( var item in ToShow )
{
<text><br/>::Række 1::<br /></text>
while( columns >= sortS )
{
<text>Indsæt @(sortI+sortS)<br /></text>
sortS++;
}
sortI++;
sortS = 1;
}
}
}
这种东西有什么算法吗?还是一个简单的函数?
提前致谢
最佳答案
如果您知道要在每一行显示多少个字母,您可以这样做:
var alphabet = new []{'A', 'B', 'C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
var rows = 3;
var alphabetIndex = 0;
for(var row = 0; row < rows; row++) {
for(var letter = alphabetIndex; letter < 26; letter += rows) {
Console.Out.Write(alphabet[letter] + " ");
if(letter + rows >= 26)
alphabetIndex = (letter + rows) - 26;
}
Console.Out.WriteLine();
}
Rows 将设置您想要的行数,除此之外它应该为您解决。
关于c# - 垂直显示的字母排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30730156/