2016-11-21 10 views
0

Wie kann ich zwei String-Listen vergleichen und denselben Wert und Index der ersten Liste zurückgeben?Wie zwei Listen vergleichen und Wert und Index zurückgeben

Beispiel:

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

ich zurückkommen müssen c und Index 3, a und Index 1

ich nur jetzt bin im Vergleich:

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

Vielen Dank für Ihre Hilfe.

Antwort

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: Wenn Sie nicht über ein 0 basierten Index möchten, können Sie diese stattdessen tun:

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

EDIT2: Duplikate aus beiden Listen

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: noch ein weiteres Update des Codes, bei dem wir die Indizes für jedes Element in beiden Listen abrufen, sowie die Verwaltung von Duplikaten in derselben Liste

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

(optional) hinzufügen

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

vor dem ";" um nur die in der zweiten Liste vorhandenen Elemente abzurufen

+0

Ich habe noch eine Frage. wenn ich den zweiten index auch brauche, was ich tun muss? – Aranfea

+0

@Aranfea du meinst die Duplikate aus der zweiten Liste? Ich habe meine Antwort aktualisiert – Innat3

+0

Ich möchte diese Daten + Index der zweiten Liste z. listA {"a", "b", "c"}; listB {"d", "a", "c"}; Ich möchte zeigen: "a", "1" - Index von listA, "2" - Index von listB – Aranfea

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

Dies wird eine IEnumerable von anonymen Typen des Produkts und den Index dieses Elements in der productIdList Liste erstellen.

0

Versuchen Sie dies, es könnte Ihnen helfen.

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(); 
Verwandte Themen