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

C# ASP.NET中按原顺序对列表相似项分组实现方案问询

实现按前缀分组并保留原顺序的方法

当然可以搞定!你要的这种「按首次出现的分组归类,同时完全保留原顺序」的需求,确实不能用普通的升/降序排序——普通排序只会按字符顺序打乱原有排列,而我们需要的是稳定分组排序:既把相同前缀的元素归为一组,又保持各组在原列表中的先后顺序,组内元素也保留原有的出现顺序。

核心思路

  1. 先遍历原列表,记录每个前缀第一次出现的顺序(比如用字典存储前缀对应的顺序索引)
  2. 以这个「首次出现顺序」作为排序依据,对原列表进行排序——这样相同前缀的元素会被归到一起,且各组的顺序和原列表中首次出现的顺序一致
  3. 利用稳定排序特性(比如Python的sorted、C#的OrderBy),保证组内元素的相对顺序和原列表一致

Python 实现示例

# 原列表
original_list = ["tbl1_aaa", "tbl1_bbb", "chk2_ccc", "drp3_ddd", "tbl1_eee", "txt4_fff", "chk2_ggg"]

# 第一步:记录每个前缀首次出现的顺序
prefix_order = {}
current_order = 0
for item in original_list:
    # 提取下划线前的前缀
    prefix = item.split('_')[0]
    if prefix not in prefix_order:
        prefix_order[prefix] = current_order
        current_order += 1

# 第二步:按前缀的首次出现顺序排序
sorted_list = sorted(original_list, key=lambda x: prefix_order[x.split('_')[0]])

print(sorted_list)
# 输出结果:['tbl1_aaa', 'tbl1_bbb', 'tbl1_eee', 'chk2_ccc', 'chk2_ggg', 'drp3_ddd', 'txt4_fff']

C# 实现示例

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        // 原列表
        List<string> originalList = new List<string> 
        { 
            "tbl1_aaa", "tbl1_bbb", "chk2_ccc", "drp3_ddd", "tbl1_eee", "txt4_fff", "chk2_ggg" 
        };

        // 记录前缀首次出现的顺序
        Dictionary<string, int> prefixOrder = new Dictionary<string, int>();
        int order = 0;
        foreach (string item in originalList)
        {
            string prefix = item.Split('_')[0];
            if (!prefixOrder.ContainsKey(prefix))
            {
                prefixOrder.Add(prefix, order++);
            }
        }

        // 按前缀首次出现顺序排序
        List<string> sortedList = originalList.OrderBy(x => prefixOrder[x.Split('_')[0]]).ToList();

        // 输出结果
        foreach (string item in sortedList)
        {
            Console.WriteLine(item);
        }
    }
}

为什么这个方法有效?

  • 我们没有直接按前缀的字母顺序排序,而是按前缀第一次出现在原列表中的先后顺序作为排序key,这样tbl1因为第一个出现,key为0,chk2为1,以此类推,完美保留了原列表的分组顺序。
  • 稳定排序算法会保证相同key的元素,保持它们在原列表中的相对位置,所以组内的元素顺序也和原列表一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:36:04