使用比较器的 LINQ 自定义排序
LINQ custom sort using comparer
我有一个 class:
public class Item
{
public int ownerID;
public decimal value;
}
还有一个对象数组
Item[] items;
看起来像:
ownerID value
476478 0.65
636566 0.2
我还有第二个class
public class Owner
{
public int ownerID;
public int index;
}
还有一组对象
Owner[] owners;
"owners" 根据索引按特定顺序排序,如下所示:
ownerID index
636566 1
476478 2
如何使用 LINQ 和比较器按与 "owners" 相同的顺序对 "items" 进行排序?
预计会是这样的:
items = items.OrderBy(o => o.OwnerID, comparer(o))
"index" 进行的比较。
非常感谢。
试试这个
//Initiate new object
Item items= new Items();
//Sort the items based on owner ID
List myList = items.OrderBy(x => x.ownerID).ToList();
您可以像这样将 Owner
数组变成 Dictionary<int, int>
:
Dictionary<int, int> ownerDict = owners.ToDictionary(x => x.ownerID, y => y.index);
然后用它来订购商品,例如:
Item[] orderedItems = items.OrderBy(i => ownerDict[i.ownerID]).ToArray();
要按相同索引对项目进行排序,对所有者进行排序。
您可以使用 LINQ .Select()
,它将使用集合迭代器按自然顺序处理集合。然后可以使用 Select 中的 lambda 从 items
中获取每个对应的项目。像这样:
var itemsInOrder = owners
.Select(x => items.First(item => item.ownerId == x.ownerId))
.ToArray();
这假定每个 ownerId 都可以在 items
中找到。如果那不是真的,那么你将不得不稍微扩展它,例如像这样:
var itemsInOrder = owners
.Select(x => items.FirstOrDefault(item => item.ownerId == x.ownerId))
.Where(item => item != null)
.ToArray();
假设您要做的是使用 Owner 对象的索引 属性 来订购商品,这样的事情应该可以完成:
var joined = items.Join(owners, item => i.OwnerId, owner => o.OwnerId, (item, owner) => new
{
Item = item,
Index = owner.Index
});
var orderedItems = joined.OrderBy(j => j.Index).Select(j => j.Item);
我有一个 class:
public class Item
{
public int ownerID;
public decimal value;
}
还有一个对象数组
Item[] items;
看起来像:
ownerID value
476478 0.65
636566 0.2
我还有第二个class
public class Owner
{
public int ownerID;
public int index;
}
还有一组对象
Owner[] owners;
"owners" 根据索引按特定顺序排序,如下所示:
ownerID index
636566 1
476478 2
如何使用 LINQ 和比较器按与 "owners" 相同的顺序对 "items" 进行排序?
预计会是这样的:
items = items.OrderBy(o => o.OwnerID, comparer(o))
"index" 进行的比较。
非常感谢。
试试这个
//Initiate new object
Item items= new Items();
//Sort the items based on owner ID
List myList = items.OrderBy(x => x.ownerID).ToList();
您可以像这样将 Owner
数组变成 Dictionary<int, int>
:
Dictionary<int, int> ownerDict = owners.ToDictionary(x => x.ownerID, y => y.index);
然后用它来订购商品,例如:
Item[] orderedItems = items.OrderBy(i => ownerDict[i.ownerID]).ToArray();
要按相同索引对项目进行排序,对所有者进行排序。
您可以使用 LINQ .Select()
,它将使用集合迭代器按自然顺序处理集合。然后可以使用 Select 中的 lambda 从 items
中获取每个对应的项目。像这样:
var itemsInOrder = owners
.Select(x => items.First(item => item.ownerId == x.ownerId))
.ToArray();
这假定每个 ownerId 都可以在 items
中找到。如果那不是真的,那么你将不得不稍微扩展它,例如像这样:
var itemsInOrder = owners
.Select(x => items.FirstOrDefault(item => item.ownerId == x.ownerId))
.Where(item => item != null)
.ToArray();
假设您要做的是使用 Owner 对象的索引 属性 来订购商品,这样的事情应该可以完成:
var joined = items.Join(owners, item => i.OwnerId, owner => o.OwnerId, (item, owner) => new
{
Item = item,
Index = owner.Index
});
var orderedItems = joined.OrderBy(j => j.Index).Select(j => j.Item);