Нахождение индексов одинаковых элементов в листе

У меня есть лист со значениями, мне нужно составить алгоритм ,который находит индексы повторяющихся элементов. Допустим в этом примере он должен находить (0 8) (1 6).

Лист со значениями

неудачные попытки

public void SearchValues(Form1 form)
{
    var exploredList = WorkWithFiles.ExploreTable(form);
    var count = new List<int>();
    var count2 = new List<int>();
    var idx = new List<int>();



    for (var i = 0; i < form.dataGridView1.Rows.Count - 1; i++)
    {
        var l = exploredList[i].CountOfRoom;

        for (var j = 1; j < form.dataGridView1.Rows.Count - 2; j++)
        {
            if (l == exploredList[j].CountOfRoom)
            {
                count2.Add(j + 1);
                Console.WriteLine(j + 1);
            }
        }
    }














    for (var i = 0; i < form.dataGridView1.Rows.Count - 1; i++)
    {
        for (var j = 0; j < form.dataGridView1.Rows.Count - 1; j++)
        {
            if (exploredList[j].CountOfRoom.Equals(exploredList[i].CountOfRoom))
            {
                count.Add(i);
                count.Add(j);
                Console.WriteLine((i + 1) + "  " + (j + 1));
            }
        }
    }


    for (var i = 0; i < count.Count; i += 2)
    {
        if (count[i] == count[i + 1])
            count.RemoveRange(i, i + 1);

    }

    foreach (var VARIABLE in count)
    {
        Console.WriteLine(VARIABLE);
    }


    for (var i = 0; i < form.dataGridView1.Rows.Count - 1; i++)
    {
        if (!count.Contains(exploredList[i].CountOfRoom))
        {
            count.Add(exploredList[i].CountOfRoom);

        }
    }

    for (int i = 0; i < count.Count; i++)
    {
        for (int j = i + 1; j < count.Count; j++)
        {
            if (count[i].Equals(count[j]))
            {
                Console.WriteLine(i + " " + j);
            }
        }
    }


    //foreach (var variable in count)
    //{

    //    for (var i = 0; i < form.dataGridView1.Rows.Count - 1; i++)
    //    {
    //        if (variable == exploredList[i].CountOfRoom)
    //        {
    //            count2.Add(i + 1);
    //            Console.WriteLine((i + 1));
    //        }
    //    }
    //}




    var jk = 0;
    List<int> func(int[] arr)
    {
        var li = new List<int>();

        for (int i = 0; i < arr.Length; i++)
        {
            if (!li.Contains(arr[i]))
            {
                li.Add(arr[i]);

            }
            ++jk;
        }


        return li;
    }




















    foreach (var VARIABLE in count)
    {
        Console.Write((VARIABLE + 1) + " " + "\n");
    }

Ответы (2 шт):

Автор решения: Aziz Umarov

Пробегаете по массиву

for (int index = 0; index < list.Count; index ++) {   
   int currentIndex = index;
   do {
       currentIndex = list.IndexOf(list[index], currentIndex + 1);
       if (currentIndex > 0) {          
          Console.WriteLine($"Dublicate {list[index]} at ({index}, {currentIndex})");
       }
   } while (currentIndex == -1)
}
→ Ссылка
Автор решения: tym32167

Вы можете также использовать Linq, пример

var count2 = exploredList.Select((x, index)=>(x.CountOfRoom, index))
    .GroupBy(x=>x.CountOfRoom, x=>x.index)
    .SelectMany(x=>x)
    .ToList();

foreach (var index in count2)
    Console.WriteLine(index);
→ Ссылка