gpt4 book ai didi

c# - Icomparer c# 列表

转载 作者:行者123 更新时间:2023-11-30 21:40:51 25 4
gpt4 key购买 nike

我有一个像这样的图像名称列表 {"1.jpg", "10.jpg", "2.jpg"}

我想这样排序 {"1.jpg", "2.jpg", "10.jpg"}

我创建了这个比较器。这意味着如果 xy == "DSC_10.jpg",那么如果列表是 {"DSC_1.jpg", "DSC_10.jpg", "DSC_2.jpg", ...} 不排序并保留列表

var comparer = new CompareImageName();
imageUrls.Sort(comparer);
return imageUrls;

public class CompareImageName : IComparer<string>
{
public int Compare(string x, string y)
{
if (x == null || y == null) return 0;
var l = x.Split('/');
var l1 = y.Split('/');
int a, b;
var rs = int.TryParse(l[l.Length - 1].Split('.')[0], out a);
var rs2 = int.TryParse(l1[l1.Length - 1].Split('.')[0], out b);

if (!rs || !rs2) return 0;
if (a == b || a == 0 && b == 0) return 0;

return a > b ? 1 : -1;
}
}

使用名称 {"1.jpg", "10.jpg", "2.jpg"} 正确排序,但如果列表是 {"DSC_1.jpg", “DSC_10.jpg”、“DSC_2.jpg”、...

我在 MSDN 上读到:

enter image description here

我的代码有什么问题?

最佳答案

我认为您最好为此做一些正则表达式。试试这个解决方案:

public class CompareImageName : IComparer<string>
{
public int Compare(string x, string y)
{
if (x == null || y == null) return 0;

var regex = new Regex(@"/(((?<prefix>\w*)_)|)((?<number>\d+))\.jpg$");

var mx = regex.Match(x);
var my = regex.Match(y);

var r = mx.Groups["prefix"].Value.CompareTo(my.Groups["prefix"].Value);
if (r == 0)
{
r = int.Parse(mx.Groups["number"].Value).CompareTo(int.Parse(my.Groups["number"].Value));
}
return r;
}
}

除了 Regex 字符串本身,这更容易遵循逻辑。

关于c# - Icomparer c# 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44125455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com