如何根据其中一个字符串数组(具有相同长度)的字母顺序对 4 个独立的字符串数组进行排序?(在 C# 中)

Mda*_*nde 0 c# arrays sorting multidimensional-array

我已通过 WMI 读取了远程 PC 上安装的程序。我已读取“程序名称”、“程序发布者”、“程序安装日期”和“程序安装路径”属性,并将它们分别存储在单独的字符串数组中。(所有长度相同的数组:99)

我想按照程序名称的字母顺序列出程序信息。是否可以在不将 4 个数组合并到一个多维数组中的情况下实现这一点?或者我应该首先将数组合并为一个二维数组?如果是的话怎么办?

由于我是 C# 新手,如果您能提出建议,我将非常感谢。我读过很多文章,但我感到更加困惑。

    public string[] Programs_WMI_name = new string[99];
    public string[] Programs_WMI_publisher = new string[99];
    public string[] Programs_WMI_installdate = new string[99];
    public string[] Programs_WMI_installlocation = new string[99];
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个但出现错误:

在我的公开课上

    public class TagService{
    public string Programs_WMI_Name { get; set; }
    public string Programs_WMI_Publisher { get; set; }
    public string Programs_WMI_Installdate { get; set; }
    public string Programs_WMI_Installlocation { get; set; }
    public List<string> programs = new List<string>(99);
    }
Run Code Online (Sandbox Code Playgroud)

然后

    for (int i = 0; i < TagService.Programs_WMI_name.Length; i++)
            {
                programs.Add(new TagService
                {
                    Programs_WMI_Name = TagService.Programs_WMI_name[i],
                    Programs_WMI_Publisher = TagService.Programs_WMI_publisher[i],
                    Programs_WMI_Installdate = TagService.Programs_WMI_installdate[i],
                    Programs_WMI_Installlocation = TagService.Programs_WMI_installlocation[i],
                });
            }
            programs = programs.OrderBy(p => p.Programs_WMI_Name).ToList();
    
Run Code Online (Sandbox Code Playgroud)

Fir*_*iro 5

为自己和他人一个忙,利用课程

public class ProgramInfo
{
    public string Name { get; set; }
    public string Publisher { get; set; }
    public string InstallDate { get; set; }
    public string InstallLocation { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

来自数组

var programs = new List<ProgramInfo>(Programs_WMI_name.Length);
for (int i = 0; i < Programs_WMI_name.Length; i++)
{
    programs.Add(new ProgramInfo
    {
            Name = Programs_WMI_name[i],
            Publisher = Programs_WMI_publisher[i],
            InstallDate = Programs_WMI_installdate[i],
            InstallLocation = Programs_WMI_installlocation[i],
    });
}
Run Code Online (Sandbox Code Playgroud)

最好直接从查询中填写

var programs = new List<ProgramInfo>();
foreach (var row in new ManagementObjectSearcher(somequery).Get())
{
    programs.Add(new ProgramInfo
    {
        Name = row["name"],
        Publisher = row["publisher"],
        InstallDate = row["installdate"],
        InstallLocation = row["installlocation"],
    });
}
Run Code Online (Sandbox Code Playgroud)

完整的示例可能如下所示

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

namespace Test
{
    public class ProgramInfo
    {
        public string Name { get; set; }
        public string Publisher { get; set; }
        public string InstallDate { get; set; }
        public string InstallLocation { get; set; }
    }

    public class TagService
    {
        public static List<ProgramInfo> Programs { get; } = new List<ProgramInfo>();

        public static void RefreshPrograms()
        {
            Programs.Clear();
            foreach (var row in new ManagementObjectSearcher(somequery).Get())
            {
                programs.Add(new ProgramInfo
                {
                    Name = row["name"],
                    Publisher = row["publisher"],
                    InstallDate = row["installdate"],
                    InstallLocation = row["installlocation"],
                });
            }
            Programs.Sort((l, r) => string.Compare(l.Name, r.Name));
        }
    }

    public Program
    {
        public static void Main()
        {
            TagService.ReadPrograms();
            var properties = typeof(ProgramInfo).GetProperties();
            Console.WriteLine(string.Join("|", properties.Select(p => p.Name.PaddRight(10))));
            foreach (var program in TagService.Programs)
            {
                Console.WriteLine(string.Join("|", properties.Select(p => ((string)p.GetValue(program)).PaddRight(10))));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)