更好的方式来做到这一点(使用LINQ)?
问题描述:
我正在比较两个列表,并且在一种情况下,我从一个列表中删除不常见的元素(从具有更多元素的列表中删除),在另一种情况下(else语句),我将非常见元素添加到一个列表中以较少的元素列出)更好的方式来做到这一点(使用LINQ)?
我能够使用下面给出的代码来做到这一点,但我希望能够以更简洁的方式实现这一点。请建议我一个等效的LINQ代码
if (receivedList.Count < AuthorFacets.Count)
{
for (int i = AuthorFacets.Count - 1; i >= 0; i--)
{
if (!receivedList.Contains(AuthorFacets[i]))
AuthorFacets.RemoveAt(i);
}
}
else
{
for (int i = 0; i < receivedList.Count; i++)
{
if (!AuthorFacets.Contains(receivedList[i]))
AuthorFacets.Add(receivedList[i]);
}
}
答
使用LINQ可以试试这个
if (receivedList.Count < AuthorFacets.Count)
{
AuthorFacets.RemoveAll(a=>!receivedList.Contains(a))
}
else
{
AuthorFactets.AddRange(receivedList.Where(r=> !AuthorFacets.Contains(r)))
}
答
这个怎么样?
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var receivedList = new List<string>();
var AuthorFacets = new List<string>();
receivedList.Add("2");
receivedList.Add("4");
receivedList.Add("6");
AuthorFacets.Add("1");
AuthorFacets.Add("2");
AuthorFacets.Add("3");
if (receivedList.Count < AuthorFacets.Count)
{
AuthorFacets = AuthorFacets.Where(i => receivedList.Contains(i)).ToList();
}
else
{
AuthorFacets.AddRange(receivedList.Where(i => !AuthorFacets.Contains(i)));
}
Console.WriteLine(string.Join("\n",AuthorFacets));
}
}
有什么不对的,你有什么?我认为它很简洁,因为它更易于阅读。 – CodingYoshi
因此,如果我错了,是否让'AuthorFacets'等于'recievedList' ?,因为你正在做的事情已经清楚了,正如@CodingYoshi所指出的那样,我不会另外建议,但是你可以尝试'except' - 警告 - 与较大的一个比较,然后删除除了从较大的结果之外获得的那些..虽然这有点扭曲:) – Jaya
我也相信你错过了一个重要的情况,当计数是平等的 - >即使如果计数是相等的,里面的元素可能完全不同。只是说不知道你是否想要处理这种情况,尽管 – Jaya