gpt4 book ai didi

c# - 列表(排序)的自定义 IComparer 问题 - c#

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

谁能帮忙,我在排序时遇到问题,我以为我已经排序了,但似乎没有用。

我有一个存储以下值的列表

8,6,10,11,7

我还有另一个列表(我的类中的附件,它有一个名为 accessoryId 的属性,当前类按 id 的顺序排列,当前为 6、7、8、10、11)

因此我需要将它们从 6,7,8,10,11 排序到简单列表中使用的顺序 8,6,10,11,7

我有我的 icomparable(见下文),我是这样调用的——它确实进入了,但出了点问题,因为列表仍然有我所有的类(class),但顺序仍然是 6、7、8、10、11

   // accesories is the IList<Accessories> (hence why i am use ToList)
// and sortOrder is the simple int list list<int>
accesories.ToList().Sort(new ItemTpComparer(sortOrder));

class ItemTpComparer : IComparer<Accessories>
{
private IList<int> otherList;

public ItemTpComparer(IList<int> otherList)
{
this.otherList = otherList;
}

#region IComparer<Accessories> Members

public int Compare(Accessories x, Accessories y)
{

if (otherList.IndexOf(x.AccessoryId) > otherList.IndexOf(y.AccessoryId))
return 1;

else if (otherList.IndexOf(x.AccessoryId) < otherList.IndexOf(y.AccessoryId))
return -1;
else
return 0;

// tried below also didn't work
//return otherList.IndexOf(x.AccessoryId) - otherList.IndexOf(y.AccessoryId);

最佳答案

比较器是正确的(即使是注释单行版本)。问题是ToList()创建一个新的 List包含 IEnumerable<T> 中元素的副本基本上,您正在创建一个新列表,对其进行排序并丢弃。

var sortedList = accesories.ToList();
sortedList.Sort(new ItemTpComparer(sortOrder));

我建议将其替换为:

var sortedList = accessories.OrderBy(sortOrder.IndexOf).ToList();

这样,就不需要比较器实现了。您还可以轻松地按降序排序:

var sortedList = accessories.OrderByDescending(sortOrder.IndexOf).ToList();

如果对象真的是List<Accessories> ,你也可以就地排序:

((List<Accessories>)accessories).Sort(new ItemTpComparer(sortOrder));

关于c# - 列表(排序)的自定义 IComparer 问题 - c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082604/

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