2016-11-21 15 views
0

2つの文字列リストを比較し、同じ値と最初のリストのインデックスを返すにはどうすればよいですか?2つのリストと戻り値とインデックスを比較する方法

例:

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

EDIT:あなたは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)); 

を追加 ";" 2番目のリストにある要素のみを取得する

+0

もう1つ質問があります。 2番目のインデックスが必要な場合は、私は何をする必要がありますか? – Aranfea

+0

@Aranfeaあなたは2番目のリストから重複を意味しますか?私は私の答えを更新しました – Innat3

+0

私はこの同じデータ+ 2番目のリストのインデックスを表示したいと思います。 listA {"a"、 "b"、 "c"}; 012BlistB {"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(); 
関連する問題