c# - 使用字符和数字对 List<> 进行排序

标签 c# list sorting

我正在为我公司开发的程序开发更新工具。要更新程序,我需要执行一些 SQL 脚本。这些脚本必须有正确的顺序(当然)。我有一个 list 。 SqlScriptModel 有一个“名称”属性,我用来对列表进行排序。 SQL-Scripts-Name 以 Programm-Version 开头(例如:5.8.1.0)。目前我的“排序”列表如下所示:

5.8.0.1 - Update Script
5.8.0.10 - Update Script
5.8.0.11 - Update Script
5.8.0.2 - Update Script

当然5.8.0.10脚本需要在5.8.0.2脚本之后执行。

我的代码是这样的:

SqlScriptList.Sort((x, y) => string.Compare(x.Name, y.Name));

有人遇到过同样的问题吗?或者有指向有效解决方案的链接?我将不胜感激!

最佳答案

只需重命名您的文件,使所有版本子字符串的长度相同。用这样的零填充版本的最后部分:

5.8.0.01 - Update Script
5.8.0.02 - Update Script
5.8.0.10 - Update Script
5.8.0.11 - Update Script

如果您不想这样做,在代码中您可以将版本字符串转换为数字,然后根据该数字进行排序:

string version = "5.8.0.10";
int fullVersionNumber =
    version
        .Split(new char[] { '.' })
        .Select(int.Parse)
        .Aggregate((first, second) => first * 100 + second);
// fullVersionNumber = 5080010

你可以用这个做一个函数:

public static int GetNumericVersion(string fileName)
{
    string version = fileName.Split(new char[] { ' ' })[0];
    int fullVersionNumber =
        version
            .Split(new char[] { '.' })
            .Select(int.Parse)
            .Aggregate((first, second) => first * 100 + second);

    return fullVersionNumber;
}

然后像这样使用它:

SqlScriptList.Sort(
    (x, y) => GetNumericVersion(x.Name).CompareTo(GetNumericVersion(y.Name)));

关于c# - 使用字符和数字对 List<> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33081135/

相关文章:

c# - .Net 将一个大型表单提交分解为多个提交

c# - 无法将列表保存到 session /ViewBag 变量

python - 如何将元组列表转换为python中部分元组的列表

java - 如何在 Java 中按对象属性 long 对 arrayList<Object> 进行排序

c - 按字母顺序对结构中的数据进行排序

c# - 在 C# 后端代码中的 http get 请求中包含原始文本

c# - 使用安全描述符在 C# 中创建 SMB 共享

python - 将列表项写入 Python 中的文本文件

Java递归关于反转单个列表

c# - 如何根据 DataGridView 的列内容对其进行排序?