C#排序脚本/从foreach中挑选最后一个Int

Lov*_*ngh 0 c#

我的排序脚本需要一些帮助.我想排序一些文件.这就是Name的构造方式:Name#Page#Version我可以选择名称/类别和页面,但我不知道如何选择最后一个版本:/这里你可以看到一个例子. 在此输入图像描述

foreach(string files in Directory.GetFiles(path).OrderBy(fi => fi.Length))
        {
            try
            {
                filename = Path.GetFileNameWithoutExtension(files);


                index = filename.LastIndexOf("#");
                index2 = filename.LastIndexOf("#",index-1);

                strversion = filename.Substring(index+1);
                strpage = filename.Substring(index2+1);
                strpage = strpage.Substring(0, strpage.LastIndexOf("#"));                    

                page = Int32.Parse(strpage);
                version = Int32.Parse(strversion);
                Console.WriteLine("Page: "+page);
                Console.WriteLine("Version: "+version);

                if (filename.Contains("SMA"))
                {

                    if (page == 1)
                    {

                        Console.WriteLine(filename);

                    }
                }
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine(e.Message);
            }
        }
Run Code Online (Sandbox Code Playgroud)

The*_*One 5

你过度复杂化了,你可以将字符串拆分#并从给定的数组中得到你想要的东西:

var fileName = "SMA#1#2";
var parts = fileName.Split('#');
var name = parts[0];
var page = parts[1];
var version = parts[2];
Run Code Online (Sandbox Code Playgroud)

编辑

至于获取version每个的最后一个page,你可能最好为你的文件创建某种类,然后按页分组,然后按版本排序,然后选择第一个:

public class Program
{
    public static void Main()
    {
        var fileNames = new[] { "SMA#1#1", "SMA#1#2", "SMA#1#3", "SMA#2#1", "SMA#2#3" };
        var files = (from fileName in fileNames select fileName.Split('#') into parts let name = parts[0] let page = Int32.Parse(parts[1]) let version = Int32.Parse(parts[2]) select new MyFile(name, page, version)).ToList();
        var grouped = files.GroupBy(x => x.Page).ToList();
        foreach (var group in grouped)
        {
            var ordered = group.OrderByDescending(x => x.Version);
            Console.WriteLine($"Page {group.Key} highest version: {ordered.First().Version}");
        }
    }
}

public class MyFile
{
    public string Name { get; set; }
    public int Page { get; set; }
    public int Version { get; set; }

    public MyFile(string name, int page, int version)
    {
        Name = name;
        Page = page;
        Version = version;
    }
}
Run Code Online (Sandbox Code Playgroud)