2016-11-21 309 views
0

如何比較兩個字符串列表並返回第一個列表的相同值和索引?如何比較兩個列表並返回值和索引

例子:

a = List<string> {a,b,c}; 
b = List<string> {d,a,c}; 

我需要回到c和指數3a和索引1

我只是比較現在:

var duplicateProduct = productIdList.Where(b => allProduct.Any(a => b.Contains(a))); 

感謝您的幫助。

回答

0
List<string> listA = new List<string>() { "a", "b", "c" }; 
List<string> listB = new List<string>() { "d", "a", "c" }; 

var result = listA.Select((x, y) => new { element = x, index = y }) 
    .Where(z => listB.Contains(z.element)); 

編輯:如果你不想一0的索引,你可以這樣做,而不是:

var result = listA.Select((x, y) => new { element = x, index = y += 1 }) 
    .Where(z => listB.Contains(z.element)); 

EDIT2:從兩份名單

var list1_duplicates = listA.Select((x, y) => new { element = x, index = y }) 
      .Where(z => listB.Contains(z.element)); 

var list2_duplicates = listB.Select((x, y) => new { element = x, index = y }) 
      .Where(z => listA.Contains(z.element)); 

var all_duplicates = list1_duplicates.Concat(list2_duplicates); 

EDIT3得到重複:尚未代碼的另一次更新,我們在每個元素的兩個列表中檢索索引,同時管理同一列表中的重複項

List<string> listA = new List<string>() { "a", "b", "c" }; 
List<string> listB = new List<string>() { "d", "a", "c", "a" }; 

var result = listA.Select((a) => new 
{ 
    element = a, 
    indexA = listA.IndexOf(a), 
    indexB = Enumerable.Range(0, listB.Count).Where(b => listB[b].Equals(a)).ToArray() 
}); 

(可選)之前添加

.Where(a => listB.Contains(a.element)); 

的 「;」只檢索出現在第二個列表中的元素

+0

我還有一個問題。如果我還需要第二個索引,我需要做什麼? – Aranfea

+0

@Aranfea你的意思是從第二個列表中的重複?我已經更新了我的答案 – Innat3

+0

我想顯示第二個列表的相同數據+索引,例如。 listA {「a」,「b」,「c」}; listB {「d」,「a」,「c」};我想顯示:「a」,「1」 - listA的索引,「2」 - listB的索引 – Aranfea

1
var duplicateProduct = productIdList.Where(b => allProduct.Any(a => b.Contains(a))) 
         .Select(x => new { x, index = productIdList.IndexOf(x)}); 

這將創建匿名類型的項目的IEnumerable並在productIdList列表項的索引。

0

試試這個,它可能會幫助你。

var al =new List<string> { "a","b","c"}; 
var bl = new List<string> { "d","a","c"}; 

var res = (from a in al 
      join b in bl 
      on a equals b 
      select new 
      { 
       Matched = a, 
       Index = al.IndexOf(a) 
      }).ToList(); 
相關問題