2017-06-03 68 views
0

我正在比较两个列表,并且在一种情况下,我从一个列表中删除不常见的元素(从具有更多元素的列表中删除),在另一种情况下(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]); 
    } 
} 
+2

有什么不对的,你有什么?我认为它很简洁,因为它更易于阅读。 – CodingYoshi

+0

因此,如果我错了,是否让'AuthorFacets'等于'recievedList' ?,因为你正在做的事情已经清楚了,正如@CodingYoshi所指出的那样,我不会另外建议,但是你可以尝试'except' - 警告 - 与较大的一个比较,然后删除除了从较大的结果之外获得的那些..虽然这有点扭曲:) – Jaya

+0

我也相信你错过了一个重要的情况,当计数是平等的 - >即使如果计数是相等的,里面的元素可能完全不同。只是说不知道你是否想要处理这种情况,尽管 – Jaya

回答

3

使用LINQ可以试试这个

if (receivedList.Count < AuthorFacets.Count) 
{ 
    AuthorFacets.RemoveAll(a=>!receivedList.Contains(a)) 
} 
else 
{ 
    AuthorFactets.AddRange(receivedList.Where(r=> !AuthorFacets.Contains(r))) 
} 
1

这个怎么样?

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)); 
    } 
} 

源代码:https://dotnetfiddle.net/Hz8anK

相关问题