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
Ich habe noch eine Frage. wenn ich den zweiten index auch brauche, was ich tun muss? – Aranfea
@Aranfea du meinst die Duplikate aus der zweiten Liste? Ich habe meine Antwort aktualisiert – Innat3
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