gpt4 book ai didi

c# - 数组列表排序

转载 作者:太空宇宙 更新时间:2023-11-03 17:45:27 25 4
gpt4 key购买 nike

我有一个包含大量字符串的 ArrayList。它需要根据姓名年龄金额这三个字段(本质上是三个子字符串)进行就地排序。 Age 是第一个子字符串(位置 0-3),Name 是第二个 (3-6),Amt 是最后一个 (6-10) .这些参数的排序顺序非常重要,如下所示:

首先按姓名执行升序排序,然后按年龄执行升序排序(实际上在substring),然后按 Amt 进行降序排序。就是这样。

我有这门课

public class ArrComparer : IComparer
{
public int Compare(object x, object y)
{
string left = x.ToString();
string right = y.ToString();
string lhs = left.Substring(3, 6);
string rhs = right.Substring(3, 6);
return lhs.CompareTo(rhs);
}
}

我用它来仅基于一个字段进行排序 - 通过调用命名

RecordList.Sort(new ArrComparer());

这让我可以根据一个 字段正确排序。问题是我如何修改此代码以允许我根据所有三个 AT ONCE 以正确的顺序并使用正确的 asc/desc 模式进行排序?

任何代码或提示将不胜感激。 (顺便说一下,如果您想知道在这个项目中使用通用 List<T> 不是一个选项)。

最佳答案

ArrayList 仍然实现 IEnumerable,这意味着您可以在 linq 中使用简单的 orderby() 和 thenby() 扩展:

RecordList = new ArrayList(
RecordList.Cast<string>().OrderBy(s => s.Substring(3,3))
.ThenBy(s => int.Parse(s.Substring(0,3)))
.ThenByDescending(s => double.Parse(s.Substring(6,4)))
.ToArray());

表达这一点的其他方法包括构建更复杂的 .OrderBy() 或使用匿名类型将字符串组合为对象:

RecordList = new ArrayList(
Record.Cast<string>().Select(s => new {source = s, age = int.Parse(s.Substring(0, 3)), name = s.Substring(3,3), amt = double.Parse(s.Substring(6,4))})
.OrderBy(o => o.name)
.ThenBy(o => o.age)
.ThenByDescending(o => o.amt)
.Select(o => o.source).ToArray());

我喜欢这个选项,因为它会让你开始用对象来思考。正确玩牌,您可以跳过最后一个 .Select() 投影以保留对象而不是返回字符串,这将节省以后必须重新进行所有解析的工作

如果这些不是一个选项(可能与您不能使用 List 的原因相同),可以很容易地修改您现有的比较方法,如下所示:

public class ArrComparer : IComparer
{
public int Compare(object x, object y)
{
int result;
string left = x.ToString();
string right = y.ToString();
string lhs1 = left.Substring(3, 3);
string rhs1 = right.Substring(3, 3);
result = lhs1.CompareTo(rhs1);

if (result == 0)
{
int lhs2 = int.Parse(left.Substring(0,3));
int rhs2 = int.Parse(right.Substring(0,3));
result = lhs2.CompareTo(rhs2);
}

if (result == 0)
{
double lhs3 = double.Parse(left.Substring(6,4));
double rhs3 = double.Parse(right.Substring(6,4));
result = rhs3.CompareTo(lhs3);
}

return result;
}
}

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

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