c# - 垂直显示的字母排序列表

标签 c# algorithm razorengine

我有一个列表,包含字母表。

当使用 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/

相关文章:

c# - 这段代码如何设置一个只读属性?

c# - 如何获取 ListView 数据模板项目双击WPF MVVM

algorithm - 这个二进制搜索的伪代码是否正确?

razor - 在没有 Microsoft.NET.Sdk.Web 的情况下使用 Razor

c# - 有没有办法终止 MVC Razor @ : line?

c# - 用于优化性能的 C++ 虚拟机

c# - selenium webdriver中frame没有id和title时如何识别并切换到frame

algorithm - "Best-Effort"拓扑排序

使用 std::accumulate 创建最小公倍数类的 c++ 错误

asp.net-mvc - Razor Engine无法在ASP.net 5 MVC 6中运行