Предполагая, что у вас всегда есть два числа (кроме строки ключей), вы можете создать собственную структуру данных для их хранения.И тогда вместо ArrayList вы также можете использовать List.
Например,
var list = new List<Data>
{
new Data{KeyString="id001",FirstNumber=10,SecondNumber=20},
new Data{KeyString="id002",FirstNumber=10,SecondNumber=20},
new Data{KeyString="id003",FirstNumber=11,SecondNumber=20},
};
Где Data определяется как
public class Data
{
public string KeyString{get;set;}
public int FirstNumber{get;set;}
public int SecondNumber{get;set;}
}
Вы можететеперь найдите дубликат следующим образом
var result = list.GroupBy(x=>new {x.FirstNumber,x.SecondNumber}).
Where(x=>x.Count()>1);
Это вернет IEnumerable.
Если вас интересует только выбор первого KeyName в дубликатах, вы можете использовать следующее.
var result = list.GroupBy(x=>new {x.FirstNumber,x.SecondNumber})
.Where(x=>x.Count()>1)
.Select(x=>x.ToList().Select(c=>c.KeyString).First());
Это вернет id001, как описано в OP.