2017-06-03 57 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

相關問題