首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对象列表上的c# Order By

对象列表上的c# Order By
EN

Stack Overflow用户
提问于 2018-10-24 04:58:34
回答 1查看 98关注 0票数 0

我有一个包含多个字段的对象列表/集合。其中一个是文件名。

我正在根据文件名进行排序,但没有得到正确的结果。

列表:

代码语言:javascript
复制
"552939_VVIDEO9.mp4"
"552939_VVIDEO8.mp4"
"552939_VVIDEO13.mp4"
"552939_VVIDEO12.mp4"
"552939_VVIDEO7.mp4"
"552939_VVIDEO6.mp4"
"552939_VVIDEO2.mp4"
"552939_VVIDEO16.mp4"
"552939_VVIDEO10.mp4"
"552939_VVIDEO3.mp4"
"552939_VVIDEO11.mp4"
"552939_VVIDEO4.mp4"
"552939_VVIDEO1.mp4"
"552939_VVIDEO15.mp4"
"552939_VVIDEO14.mp4"
"552939_VVIDEO17.mp4"


  List<WfVideo> orderVideo = ProductData.Videos.OrderBy(o => o.Filename, StringComparer.InvariantCultureIgnoreCase).ToList();

我得到的结果是:

代码语言:javascript
复制
VOD1
VOD2
VVIDEO1
VVIDEO10
VVIDEO11
VVIDEO12
VVIDEO13
VVIDEO14
VVIDEO15
VVIDEO16
VVIDEO17
VVIDEO2
VVIDEO3
VVIDEO4
VVIDEO5
VVIDEO6

排序有误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 06:21:12

如果你只想在数字之后对这些文件进行排序,你可以传递一个比较器来实现你想要的规则。这将根据文件名的编号对文件名进行排序:

代码语言:javascript
复制
List<string> files = new List<string>
    {
        "552939_VVIDEO9.mp4",
        "552939_VVIDEO8.mp4",
        "552939_VVIDEO13.mp4",
        "552939_VVIDEO12.mp4",
        "VOD1.mp4",
        "552939_VVIDEO6.mp4",
        "VOD2.mp4",
        "552939_VVIDEO2.mp4",
        "552939_VVIDEO16.mp4",
        "552939_VVIDEO10.mp4",
        "552939_VVIDEO3.mp4",
        "552939_VVIDEO11.mp4",
        "552939_VVIDEO4.mp4",
        "552939_VVIDEO1.mp4",
        "552939_VVIDEO15.mp4",
        "552939_VVIDEO14.mp4",
        "552939_VVIDEO17.mp4"
    };
        files.Sort((a, b) => {
            int an = 0;
            int bn = 1;
            var regex = new Regex("([0-9]+).mp4", RegexOptions.IgnoreCase);
            var aGroups = regex.Match(a).Groups;
            var bGroups = regex.Match(b).Groups;
            var aidx = aGroups.Count > 1 ? 1 : 0;
            var bidx = bGroups.Count > 1 ? 1 : 0;
            an = int.Parse(aGroups[aidx].Value);
            bn = int.Parse(bGroups[bidx].Value); 
            if (an == bn)
                return 0;
            if (an < bn)
                return -1;
            return 1;
        });
        foreach (var file in files)
        {
            Console.WriteLine(file);
        }
        Console.ReadKey();

输出:

代码语言:javascript
复制
VOD1.mp4
552939_VVIDEO1.mp4
VOD2.mp4
552939_VVIDEO2.mp4
552939_VVIDEO3.mp4
552939_VVIDEO4.mp4
552939_VVIDEO6.mp4
552939_VVIDEO8.mp4
552939_VVIDEO9.mp4
552939_VVIDEO10.mp4
552939_VVIDEO11.mp4
552939_VVIDEO12.mp4
552939_VVIDEO13.mp4
552939_VVIDEO14.mp4
552939_VVIDEO15.mp4
552939_VVIDEO16.mp4
552939_VVIDEO17.mp4

注可能需要一些额外的错误检查。当然,您可以扩展这个比较器函数,使其适用于您想要的任何规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52957750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档