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

如何在C#中按程序名称对四个等长字符串数组排序?

解决方案:按程序名称排序已安装程序信息

一、无需合并数组的最优实现(推荐)

你之前用类封装数据的思路是对的,但代码存在类定义错误——不该在实体类里嵌套List。正确做法是先定义单独的实体类封装单条程序的所有属性,再把数组数据转成该类的集合,最后直接排序。

步骤1:定义实体类

// 仅用于存储单条程序的完整信息
public class InstalledProgram
{
    public string Name { get; set; }
    public string Publisher { get; set; }
    public string InstallDate { get; set; }
    public string InstallLocation { get; set; }
}

步骤2:转换数组数据并排序

// 创建集合存储所有程序信息
List<InstalledProgram> programList = new List<InstalledProgram>();

// 遍历数组,将对应位置的属性封装到实体类中
for (int i = 0; i < Programs_WMI_name.Length; i++)
{
    // 跳过空数据(避免数组长度99但实际数据不足的情况)
    if (string.IsNullOrEmpty(Programs_WMI_name[i]))
        continue;

    programList.Add(new InstalledProgram
    {
        Name = Programs_WMI_name[i],
        Publisher = Programs_WMI_publisher[i],
        InstallDate = Programs_WMI_installdate[i],
        InstallLocation = Programs_WMI_installlocation[i]
    });
}

// 按程序名称的字母顺序排序
var sortedPrograms = programList.OrderBy(p => p.Name).ToList();

处理完成后,sortedPrograms就是按名称排序后的程序集合,直接遍历即可获取每条程序的所有属性。

二、合并为二维数组的实现(不推荐,可读性差)

如果一定要用二维数组,可按以下步骤操作:

  1. 将四个一维数组合并为二维数组,每行对应一个程序的四个属性
  2. 基于二维数组的第一列(程序名称)完成排序

代码示例

// 初始化二维数组:99行,4列(对应名称、发布者、安装日期、路径)
string[,] programsArray = new string[99, 4];

// 填充二维数组
for (int i = 0; i < 99; i++)
{
    programsArray[i, 0] = Programs_WMI_name[i];
    programsArray[i, 1] = Programs_WMI_publisher[i];
    programsArray[i, 2] = Programs_WMI_installdate[i];
    programsArray[i, 3] = Programs_WMI_installlocation[i];
}

// 将二维数组转换为可排序的结构(二维数组无法直接用OrderBy)
var sortableItems = Enumerable.Range(0, 99)
    .Select(i => new 
    { 
        OriginalIndex = i, 
        ProgramName = programsArray[i, 0] 
    })
    .Where(item => !string.IsNullOrEmpty(item.ProgramName)) // 过滤空项
    .OrderBy(item => item.ProgramName)
    .ToList();

// 根据排序后的索引生成有序二维数组
string[,] sortedArray = new string[sortableItems.Count, 4];
for (int i = 0; i < sortableItems.Count; i++)
{
    int originalIndex = sortableItems[i].OriginalIndex;
    sortedArray[i, 0] = programsArray[originalIndex, 0];
    sortedArray[i, 1] = programsArray[originalIndex, 1];
    sortedArray[i, 2] = programsArray[originalIndex, 2];
    sortedArray[i, 3] = programsArray[originalIndex, 3];
}

这种方式代码繁琐,后续读取属性需依赖索引对应,可读性和维护性远不如实体类集合方案,因此更推荐第一种实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:48:22