You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将已按字母排序的列表输出为多列,维持排序且截断末行

有序字符串列表转末行截断式多列表格

我有一个已按字母顺序排序的List<string>集合,需要将其输出为多列表格,要求每列维持字母排序,剩余元素顺延至下一列。

之前尝试用公式 var rows = (int)Math.Ceiling(data.Count() / columns); 计算行数,但这种方式会先填满每列的最大行数,导致最后一列元素数量偏少。我需要实现的是最后一行被截断的效果。

最终找到的可行解决方案代码如下:

string[,]? GetResult(List<string> input, int numColumns)
{
    if (input == null) return null;
    if (numColumns < 1) numColumns = 1;

    double rowsRemainder = input.Count / (numColumns*1.0);
    int remainder = input.Count % numColumns;
    int numRows = (int)Math.Ceiling(rowsRemainder);
    string[,] result = new string[numRows, numColumns];
    int inputIndex = 0;
    for (int col = 0; col < numColumns; col++)
    {
        for (int row = 0; row < numRows; row++)
        {
            if (row == (numRows-1) && col >= remainder) continue;

            result[row, col] = input[inputIndex];
            inputIndex++;
        }
    }

    var padLength = input.Max(x => x.Length) + 2;
    OutputValue(result, padLength);
    return result;
}

关键逻辑说明

  • 通过Math.Ceiling(input.Count / (numColumns*1.0))计算总行数,确保元素能按列均匀分布(前remainder列会比其他列多一行元素)
  • 利用input.Count % numColumns得到余数,用来标记哪些列需要填充最后一行的元素
  • 采用先列后行的遍历顺序,保证每列内的元素维持原有的字母排序
  • 当遍历到最后一行且列索引大于等于余数时,跳过填充操作,实现末行截断的效果

内容的提问来源于stack exchange,提问作者danewfie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:12:43