Существует хороший bookmarklet, названный Визуальное Событие , которое может показать Вам все события, присоединенные к элементу. Это нанесло цветную маркировку на выделения для различных типов событий (мышь, клавиатура, и т.д.). Когда Вы нависаете над ними, это показывает тело обработчика событий, как это было присоединено, и файл/номер строки (на WebKit и Opera). Можно также инициировать событие вручную.
Это не может найти каждое событие, потому что нет никакого стандартного способа искать, какие обработчики событий присоединены к элементу, но это работает с популярными библиотеками как jQuery, Прототип, MooTools, YUI, и т.д.
Немного по-другому (во всяком случае, немного более понятным для моего мозга :) ...
var newDict = new Dictionary<int, List<int>>();
var dict = new Dictionary<int, List<int>>();
dict.Add( 1, new List<int>() { 1, 2, 3, 4, 5 } );
dict.Add( 2, new List<int>() { 1, 2, 3, 4, 5 } );
dict.Add( 3, new List<int>() { 1, 2, 6 } );
dict.Add( 4, new List<int>() { 1, 6, 7 } );
dict.Add( 5, new List<int>() { 8 } );
var newKeys = dict.Values.SelectMany( v => v ).Distinct();
foreach( var nk in newKeys )
{
var vals = dict.Keys.Where( k => dict[k].Contains(nk) );
newDict.Add( nk, vals.ToList() );
}
Я не совсем уверен, чем это отличается от вашего предыдущего вопроса .
Если вы просто спрашиваете, как вернуть Dictionary
, а не Dictionary
, тогда все, что вам нужно, это вызов метода ToList
.
Кража и изменение Ответ Мехрдада на ваш другой вопрос :
var classToStudent = studentToClass
.SelectMany(
pair => pair.Value.Select(val => new { Key = val, Value = pair.Key }))
.GroupBy(item => item.Key)
.ToDictionary(gr => gr.Key, gr => gr.Select(item => item.Value).ToList());
Чтобы перевернуть словарь, нужно очень просто:
var newDic = oldDic.ToDictionary(x => x.Value, x => x.Key);
Вот и все.
Теперь ваш вопрос в другом. Речь идет об изменении отношения «многие ко многим», установленного в словаре.
Итак, допустим, у вас есть Dictionary
var table =
dict.SelectMany(
x => x.Value,
(dictEntry, entryElement) => new
{
Entity1 = dictEntry.Key,
Entity2 = entryElement
}
);
Итак, теперь вам просто нужно перегруппировать эту таблицу так, как вы хотите, а затем преобразовать ее в словарь.
var newDict =
table
.GroupBy(x => x.Entity2,
x => x.Entity1,
(entity2, entity1) => new {entity1, entity2})
.ToDictionary(x => x.entity2, x => x.entity1);