2013-10-25 1 views
0

В частности, я хочу использовать ToDictionary(). Вот некоторые примеры кода:Как создать словарь из списка с помощью объекта в качестве ключа

public class Foo 
{ 
    public int a { get; set; } 
    public int b { get; set; } 
    public int c { get; set; } 
} 

public class Key 
{ 
    public int a { get; set; } 
    public int b { get; set; } 
} 

public class KeyEqualityComparer : IEqualityComparer<Key> 
{ 
    public int GetHashCode(Key k) 
    { 
     int hash = 17; 
     hash = hash * 23 + k.a.GetHashCode(); 
     hash = hash * 23 + k.b.GetHashCode(); 

     return hash; 
    } 

    public bool Equals(Key lhs, Key rhs) 
    { 
     return ((lhs.a == rhs.a) && (lhs.b == rhs.b)); 
    } 
} 

static List<Foo> Data = new List<Foo>(); 
static Dictionary<Key, int> Data_Map = new Dictionary<Key, int>(new KeyEqualityComparer()); 

static void Main(string[] args) 
{ 
    Data.Add(new Foo() { a = 0, b = 0, c = 99 }); 
    Data.Add(new Foo() { a = 1, b = 0, c= 69 }); 

    // Key: new Key() { a = ???, b = ??? } 
    // Value: c 
    Data_Map = Data.ToDictionary(???) 

} 
+0

Я на самом деле своего рода удивлен, что вы были в состоянии получить, насколько вы сделали, и еще не мог понять, как назвать 'ToDictionary ', учитывая всю информацию, доступную в ее документации и только во всем Интернете. Вы посмотрели пример использования 'ToDictionary'? Вы посмотрели на документы MSDN? – Servy

+0

Да, я посмотрел, но все примеры просто берут один элемент в качестве ключа. – chhenning

+0

Что вы будете использовать для значений int в Data_Map? –

ответ

2
static void Main(string[] args) 
{ 
    Data.Add(new Foo() { a = 0, b = 0, c = 99 }); 
    Data.Add(new Foo() { a = 1, b = 0, c= 69 }); 

    // Key: new Key() { a = ???, b = ??? } 
    // Value: c 
    var Data_Map = Data.ToDictionary(
       x => new Key{ a = x.a, b = x.b}, 
       x => x.c, 
       new KeyEqualityComparer()); 

} 

http://msdn.microsoft.com/en-us/library/bb548554.aspx

+1

Просто нужно выбрать 'c' out как значение, и вы настроены. – Servy

+0

@ Серви ах да ... вы правы ... неправильно читайте вопрос re: вывод. СПАСИБО. – Aron

+1

Также обратите внимание, что вы можете использовать 'Tuple' вместо' Key'. – Aron

-1
Data_Map = Data.ToDitionary(key=>new Key{a = key.a, b= key.b}, 
          value=> value.c, new KeyEqualityComparer()); 
+0

Это не использует данный сравнительный коэффициент. – Servy

+0

@Servy ваш комментарий пропустил что-то, вы можете догадаться? –

+0

Вы отредактировали сообщение в течение льготного периода. Комментарий ничего не пропустил. – Servy

Смежные вопросы