我有两个 List
类型相同的 Parcel
。
public class Parcel
{
int Id {get;set;}
int RecipientID {get;set;}
DateTime CreatedOn {get;set;}
}
List<Parcel> aparcels = postFacade.GetParcels()
.OrderByDescending(x => x.CreatedOn);
List<Parcel> bparcels = postFacade.GetReplyParcels();
aparcels
中的Parcel
对象是顶级项目。他们的 RecipientID
绝不是另一个 Parcel
Id。
bparcels
中的Parcel
对象是对aparcel
中的Parcel
对象的回复。他们的 RecipientID
始终是 Parcel
Id。但是 bparcels
包含对象 all 回复 Parcel
对象,而不仅仅是 aparcel 中的
。Parcel
对象列表
我想从按 CreatedOn
排序的 aparcels
创建一个新的 Parcel
对象列表。
但是,如果 aparcels
中的 Parcel
被 bparcels
中的 Parcel
引用(通过 RecipientID
) 我想在列表中 aparcel
的 Parcel
之后添加相应的 Parcel
from bparcels
.
然后我想检查 bparcels
是否有任何其他引用“回复”Parcel
的 Parcel
对象并将其添加到列表中,检查bparcels
递归,直到找不到更多“回复”Parcel
对象。
这是我想出的:
List<Parcel> parcels = new List<Parcels>();
var replies = bposts.ToDictionary(u => u.RecipientID, p => p.Id);
foreach (var p in aparcels)
{
parcels.Add(p);
int commid = p.Id;
int val;
while (replies.TryGetValue(commid, out val))
{
parcels.Add(parcelFacade.GetById(val));
commid = val;
}
}
有什么方法可以提高这个操作的性能吗?它可能会处理数百/数千个 Parcel
对象。
最佳答案
我认为您应该在字典中存储对 Parcels 本身的引用,它们已经在列表中,这样您就不必从 Facade 再次加载它们,这可能会降低您的代码速度。
List<Parcel> parcels = new List<Parcels>();
var replies = bposts.ToDictionary(u => u.RecipientID);
foreach (var p in aparcels)
{
parcels.Add(p);
Parcel parent = p;
while (replies.TryGetValue(parent.Id, out parent))
{
parcels.Add(parent);
}
}
或者,让它更短:
foreach (var p in aparcels)
{
var current = p;
do parcels.Add(current);
while (replies.TryGetValue(current.Id, out current));
}
关于c# - 根据对父项的引用将项添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18747659/