我正在尝试使用此词典对对象列表(树结构)进行排序;
Dictionary<Tuple<int, int>, int?>
元组包含两个ID,用于标识唯一对象。值是排序顺序。
该对象具有与
类似的结构public class DmsSortOrder : IRecord
{
public int TagID { get; set; }
public int ObjectID { get; set; }
public int? Order { get; set; }
}
我需要排序
List<DmsSortOrder>
根据上面的词典。
Dictionary<Tuple<tagID, objectID>, sortOrder>()
我需要根据字典中的值对对象列表进行排序,但我不确定如何。如果重要的话,列表实际上是一个列表列表,但是一旦我可以对一个分支进行排序,我觉得使用递归对整个List进行排序很舒服。
任何帮助都将不胜感激。
答案 0 :(得分:0)
List<MyObject> list; // MyObject has Id1, Id2
Dictionary<Tuple<int, int>, int?> dict;
var sortedObjects =
dict.OrderBy(kvp=>kvp.Value))
.Select(kvp=>
list.Single(obj =>
obj.Id1 == kvp.Key.Item1
&& obj.Id2 == kvp.Key.Item2
)
);
答案 1 :(得分:0)
鉴于这些变量:
List<UniqueObject> list;
Dictionary<Tuple<int, int>, int?> sortOrders;
你应该得到这样的东西:
var sortedList = list.OrderBy(obj => sortOrders[new Tuple(obj.Id1, obj.Id2)]).ToList();
我确信有很多方法可以优化它,但总体思路相当简单。
答案 2 :(得分:0)
我想你想要这样的查询:
lists = lists
.Select(list => list
.Select(x => new {Key = Tuple.Create(x.TagID, x.ObjectID), DmsSortOrder = x})
.OrderBy(x => dict.ContainsKey(x.Key) ? dict[x.Key] : int.MaxValue)
.Select(x => x.DmsSortOrder)
.ToList())
.ToList();
如果您不想在最后看到未知对象,请更改值int.MaxValue
。
答案 3 :(得分:0)
如果要根据字典中的值对列表进行排序,可以这样做:
List<DmsSortOrder> list = ...
Dictionary<Tuple<int, int>, int> sortOrder = ...
list.Sort((x, y) => sortOrder[Tuple.Create(x.TagID, x.ObjectID)] -
sortOrder[Tuple.Create(y.TagID, y.ObjectID)]);
//or
list = list.OrderBy(o => sortOrder[Tuple.Create(o.TagID, o.ObjectID)]).ToList();