这适用于.NET 2.0,所以我不能使用LINQ。
我有一个有趣的问题。
我正在合并两个自定义类型“文章”列表。
以下代码可以很好地完成工作:
List<Article> merge = new List<Article>(GetFeatureArticles());
merge.AddRange(result);
return merge;
GetFeatureArticle只有两个项目,它们是合并列表中的前两个元素。 “结果”很大,其元素跟踪“GetFeatureArticle”的元素。
问题是我需要比较从“GetFeatureArticles()”返回的列表
到“结果”中的列表,如果匹配,则删除结果中的匹配项,而不是
在“GetFeatureArticles”中。两个列表都是List<Article>.
不幸的是,我被C#2.0限制了。
谢谢。
编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑编辑
这是我最终用GetFeaturedArticles()实现的实现 将永远是两个项目:
List<Article> k = new List<Article>(GetFeatureArticles());
foreach (Article j in k)
{
for( int i = 0; i < tiles.Count; i++ )
{
if (j.ID == tiles[i].ID)
tiles.Remove(tiles[i]);
}
}
k.AddRange(tiles);
return k;
答案 0 :(得分:4)
假设您实现了某种对象相等。
var listA = new List<Article> {a, b, c, d};
var listB = new List<Article> {e, f}; //Where e, f are equal to b, c in a.
listA.RemoveAll(listB.Contains);
答案 1 :(得分:1)
使用
List<Article> g = new List<Article>(GetFeatureArticles());
foreach (Article a in g)
{
if (result.Contains (a))
result.Remove (a);
}
g.AddRange (result);
return g;
编辑 - 根据评论:
我假设Article
是一个引用类型,分别用合适的Equals
和GetHashCode
方法实现 - 否则上面只适用于相同的引用(=“两者中的相同对象)词典“)...
答案 2 :(得分:1)
returnList = returnList.Union(ListToAdd).ToList();
或者梳理多个项目清单......
foreach (List<ListItem> l in ListsToAdd)
{
returnList = returnList.Union(l).ToList();
}
答案 3 :(得分:0)
从Dictionary
集合构建result
。然后:
foreach (Article a featuredArticles)
{
if (resultsDictionary.ContainsKey(a.Key))
{
resultsDictionary.Remove(a.Key);
}
}
然后将字典转换回列表。
答案 4 :(得分:0)
这适用于.NET Framework 2.0:
var featured = new List<Article>(GetFeaturedArticles());
result.RemoveAll(featured.Contains);
result.InsertRange(0, featured);
return result;