问题描述
在.NET/C#应用程序开发中,有两个对象的集合。其中,一个为数字类型的集合:List<int>
,另一个为类对象集合:List<T>
,这个类包含一个ID属性。
现在需要对List<T>
集合进行排序,其排序的规则是依据数字集合List<int>
中的顺序进行排序。
在.NET/C#的应用程序开发中,使用Linq
可以如何实现呢?
方案一
使用LINQ
查询表达式,如下:
var orderedByIDList = from i in ids
join o in objectsWithIDs
on i equals o.ID
select o;
方案二
借助字典Dictionary
来实现,如下:
List<int> order = ....;
List<Item> items = ....;
Dictionary<int,Item> d = items.ToDictionary(x => x.ID);
List<Item> ordered = order.Select(i => d[i]).ToList();
方案三
使用LINQ
中的Zip(...)
方法来实现,如下:
var result = objects.Zip(ints, (o, i) => new { o, i})
.OrderBy(x => x.i)
.Select(x => x.o);
方案四
创建一个排序的静态扩展方法,如下:
public static IEnumerable<TResult> SortBy<TResult, TKey>(this IEnumerable<TResult> sortItems,
IEnumerable<TKey> sortKeys,
Func<TResult, TKey> matchFunc)
{
return sortKeys.Join(sortItems,
k => k,
matchFunc,
(k, i) => i);
}
调用示例:
var sorted = toSort.SortBy(sortKeys, i => i.Key);
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册