Вы можете создать новую справочную таблицу для хранения ваших ключей и позиций индекса. Повторяйте свою коллекцию, добавляя ключи в таблицу поиска и увеличивая количество вхождений и добавляя позицию индекса.
Затем проверьте таблицу поиска на наличие записей с длинами набора позиций индекса, равными 1.
Вот что я имею в виду, заполняя таблицу поиска:
class Main
{
void DoIt()
{
Thing[] collection = new [] { new Thing(), new Thing() };
var lookupTable = new Dictionary<KeyValuePair<int, string>, List<int>>();
int index = 0;
foreach (Thing item in collection)
{
KeyValuePair<int, string> key = new KeyValuePair<int, string>(item.Bar, item.Foo.Key);
if (!lookupTable.ContainsKey(key))
lookupTable.Add(key, new List<int>());
lookupTable[key].Add(index++);
}
}
}
class Thing
{
public KeyValuePair<string, List<string>> Foo { get; set; }
public int Bar { get; set; }
}
РЕДАКТИРОВАТЬ: Теперь, я видел ваш код, я думаю, он будет очень запутанным. Я ошибочно предположил, что ваш элемент записи имел свойство:
KeyValuePair<string, List<string>>
вместо:
Dictionary<string, List<string>>
Я больше не понимаю, какие индексные позиции вам нужно получить. Боюсь, тебе придется уточнить и дальше. В частности, вы говорите:
Ключ в dict должен быть уникальным
но в словаре много ключей. Вы имеете в виду, что коллекция ключей должна быть уникальной?