2016-11-21 135 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(); 
相关问题