【发布时间】:2015-08-05 08:12:51
【问题描述】:
我的课程如下:
public class Root
{
public int Id {get;set;}
public string PlayerName{get;set;}
}
public class Scores:Root
{
public int GameT{get;set;}
public int GameZ{get;set;}
}
public class Experience:Root
{
public int ExT{get;set;}
public int ExZ{get;set;}
}
public class Total:Root
{
public int TotalT{get;set;}
public int TotalZ{get;set}
}
TotalT 和 TotalZ 分别由 GameT、ExT 和 GameZ、ExZ 相加得到。我有一个可观察的分数和经验集合,我想从中创建另一个总计集合,这是我到目前为止所做的:
public ObservableCollection<Total> GetTotal(ObservableCollection<Scores> scores,ObservableCollection<Experience> experiences)
{
var tc= new ObservableCollection<Total>();
foreach(var scr in scores)
{
foreach(var exp in experiences)
{
if(scr.Id==exp.Id)
{
var tt= new Total{
Id=scr.Id,
Name=scr.PlayerName,
TotalT=scr.GameT+exp.Ext,
TotalZ=scr.GameZ+exp.Exz
};
tc.Add(tt);
}
}
}
return tc;
}
它可以工作,但速度太慢,尤其是当记录开始达到数百时。有没有更好的办法?
【问题讨论】:
-
我认为您当前的代码甚至无法编译 -
tt.Id=scr.Id should be justId=scr.Id` - 对象初始化程序中=的 LHS 不能包含. -
如果体验总是与特定游戏直接相关,为什么要将两者作为单独的集合?为什么不是一个单一的游戏集合,每个游戏都有两个属性 - 分数和经验?
-
可能是重复的,但我觉得这个问题有另一种解决方案,而不是使用
join(我正要按下发布按钮时关闭...) -
@JonSkeet 更正了编译错误。
-
了解我们在谈论多少分数、多少经验以及“太慢”有多慢也很有用。我不认为只有“数百”条记录会成为问题。
标签: c# loops nested-loops