Поиск списка целых чисел в другом списке C # - PullRequest
2 голосов
/ 15 сентября 2011

Я хотел бы найти все вхождения моего списка источников в моем словаре.

В настоящее время я перебираю свой словарь и сравниваю каждое значение словаря.

Dictionary<string, list<int>> refList.
List<int> sourceList.

foreach(KeyValuePair<string, List<int>> kvp in refDict)
{
  List<int> refList = (List<int>)kvp.Value;
  bool isMatch = (refList.Count == sourceList.Count && refList.SequenceEqual(sourceList));
  if (isMatch)
  {
     ......
     ......
  }
}

Я хотел бы найти индексы в моем наборе всех вхождений моего списка источников,

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Я не понимаю, почему вам нужна позиция (не индекс!) Элементов словаря, потому что порядок элементов недетерминирован, MSDN :

Для целей перечислениякаждый элемент в словаре рассматривается как структура KeyValuePair, представляющая значение и его ключ.Порядок возврата товаров не определен.

, но в любом случае:

Подготовить данные:

IDictionary<string, List<int>> refDict = new Dictionary<string, List<int>>
                                {
                                    {"item1", new List<int> {1, 2, 3}},
                                    {"item2", new List<int> {4, 5, 6}},
                                    {"item3", new List<int> {1, 2, 3}}
                                };
List<int> sourceList = new List<int> {1, 2, 3};

Поиск индексов:

var indexes = refDict.Values
    .Select((list, index) => list.SequenceEqual(sourceList) ? index : -1)
    .Where(x => x >= 0);

Поиск ключей:

var keys = refDict
    .Where(item => item.Value.SequenceEqual(sourceList))
    .Select(item => item.Key);
0 голосов
/ 15 сентября 2011
var list = new List<int> { 1,2,3 };
var dico = new Dictionary<string, List<int>>();

dico.Add("A", list);
dico.Add("B", new List<int> { 2,3 });
dico.Add("C", new List<int> { 1,2,3 });

var keys = dico.Where (d => d.Value.SequenceEqual(list)).Select (d => d.Key);

Обратите внимание, что это вернет "A" и "C" !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...