leo*_*ora 2 c# linq collections
我有2个集合,我有以下代码循环遍历一个集合,看看它是否存在于另一个集合中.如果确实存在,则更新该项的属性.
foreach (var favorite in myFavoriteBooks)
{
var book = allBooks.Where(r => r.Name == favorite.Name).FirstOrDefault();
if (book != null)
{
book.IsFavorite = true;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有更优雅或更快的方式来实现上面的代码?
您可以使用Join扩展方法语法或LINQ语法来实现此目的:
扩展方法:
foreach(var favorite in myFavoriteBooks.Join(allBooks,
f => f.Name,
a => a.Name,
(f, a) => a))
{
a.IsFavorite = true;
}
Run Code Online (Sandbox Code Playgroud)
LINQ:
var favorites = from f in myFavoriteBooks
join a in allBooks on f.Name equals a.Name
select a
foreach(var favorite in favorites)
{
favorite.IsFavorite = true;
}
Run Code Online (Sandbox Code Playgroud)
这些解决方案功能相同; 它们的区别仅在于语法,它们比原始解决方案更快,因为LINQ将在两侧构建哈希表,并使用它来匹配而不是扫描原始列表中每个项目的其他列表.
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |