Нахождение индексов одинаковых элементов в листе
У меня есть лист со значениями, мне нужно составить алгоритм ,который находит индексы повторяющихся элементов. Допустим в этом примере он должен находить (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);
