作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我在我的 C# 程序中有一个定义如下的类:
class MyClass
{
public string ID;
public int Val;
public DateTime StartDate;
public DateTime EndDate;
}
我有一个巨大的List<MyClass>
在我的程序中,我需要检查此列表中是否有任何值:
Val != 0
,但标准远比这复杂得多)ID
匹配)与StartDate
等于当前值的 EndDate
我目前的代码如下:
var myTest = new List<MyClass>();
... populate myTest ...
var expectDt1 = myTest
.Where(v => v.Val != 0)
.Select(v => new {ID = v.ID, EndDate = v.EndDate});
var dontExist = expectDt1
.Where(tst =>
!myTest.Any(v =>
v.ID.Equals(tst.ID)
&& v.StartDate == tst.EndDate
)
);
此代码有效,但运行速度非常慢(我的列表有数千个条目)。有没有更好的方法(分组或其他方法)来提高效率?
(PS - 我确实知道我可以将它变成更简化的 Linq 语句而不需要中间 expectedDt1
变量,但这对效率没有帮助,所以我只是这样写它以使我的问题更容易理解)
最佳答案
您需要创建一个基于散列的查找结构来查找具有给定值的项目,而不是通过大型列表对每个项目进行线性搜索。
var lookup = myTest.Where(ItemIsValid)
.ToLookup(item => new
{
item.ID,
Date = item.EndDate,
});
然后您可以浏览其他收藏,看看是否可以在查找中找到匹配项:
var query = expectDt1.Where(item => !lookup[new {item.ID, Date = item.StartDate}].Any());
关于c# - Linq - 在列表 <> 中查找缺失值 - 效率极低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846578/
我正在创建一个 XNA 游戏并且得到了一个意想不到的结果,FPS 极低(大约 2-12 fps)。我应该使用什么程序来测试性能并找出导致性能下降的原因? 最佳答案 您是否尝试过使用 SlimTune
我是一名优秀的程序员,十分优秀!