C# 如果包含的列表不包含给定的所有值,如何删除列表中的所有实例?请帮忙
因此,我试图建立一个搜索系统,我需要浏览列表中的每一本“书”,并删除与给定“类型”不匹配的每一本。每本书都包含一个流派ID列表 我用过这个,我确信它曾经有用,但也许是我的想象力C# 如果包含的列表不包含给定的所有值,如何删除列表中的所有实例?请帮忙,c#,asp.net,linq,C#,Asp.net,Linq,因此,我试图建立一个搜索系统,我需要浏览列表中的每一本“书”,并删除与给定“类型”不匹配的每一本。每本书都包含一个流派ID列表 我用过这个,我确信它曾经有用,但也许是我的想象力 books.RemoveAll(i => i.genres != null && !genres.All(x => i.genres.Any(y => x == y))); 有人知道如何实现这个功能吗 谢谢大家! 听起来你是说一本书有很多种类型,你想根据一个类型列表过滤一个图书列表,这
books.RemoveAll(i => i.genres != null && !genres.All(x => i.genres.Any(y => x == y)));
有人知道如何实现这个功能吗
谢谢大家! 听起来你是说一本书有很多种类型,你想根据一个类型列表过滤一个图书列表,这样列表中的所有图书都有它们的所有类型 这个答案还假设
类型
类实现了IComparable
。在本例中,genres
是一个列表
:
什么是“与给定类型不匹配”的意思?给出一些有类型的书籍的例子,以及它们不匹配/不匹配的类型列表。你是说书籍有很多类型,你只想返回那些所有类型都在
类型列表中的书籍吗?另外,在Linq中完全允许使用可读名称作为变量。我有3本书,其中一本有3种类型{'1','2','3}(我实际上将它们保存为id,但这可能并不重要),另一本书只有'2'类型,最后一本书有mo类型。当我试图用你写的内容删除所有不包含gennre'2'的书时,它只删除了第一本书,留下了另外两本书……哦,我修复了它。我替换了book.genres.Any(genre=>!genres.Contains(genre));带有genres.Any(genre=>!book.genres.Contains(genre));非常感谢你!如果您使用重现问题的示例代码更新了您的问题,这将非常有用。我只是在猜测你的数据结构是什么样子。我也不确定你到底想做什么,所以包括示例输入和预期输出也会很有帮助。是的,很抱歉,我是堆栈溢出新手,我不太熟悉正确的发帖礼仪,不过现在我的问题已经解决了,谢谢!)
public class Book
{
public string Title;
public List<string> Genres;
}
var genres = new List<string> {"Horror", "Action", "Adventure"};
var books = new List<Book>
{
new Book {Title = "The Shining", Genres = new List<string> {"Horror", "Adventure"}},
new Book {Title = "Sahara", Genres = new List<string> {"Action", "Adventure"}},
new Book {Title = "The Odds", Genres = new List<string> {"Action", "Comedy"}}
};
books.RemoveAll(book =>
book.Genres != null &&
book.Genres.Any(genre => !genres.Contains(genre)));
// The last book is removed from the list, because 'genres' doesn't contain "Comedy"