問題描述
如何將對象列表轉換為兩級字典? (How to convert a list of objects to two level dictionary?)
I have a list of customer objects (e.x: List customers)
public class Customer
{
public int ID { get; set; }
public string City { get; set; }
public bool DidLive { get; set; }
}
What I need to do is to convert this "customers" collection into a dictionary
like follows,
"Dictionary<int, Dictionary<string, bool>>" Where the outer key is the "ID" and the inner key is the "City".
Can this be done using "GroupBy"
or "ToDictionary"
extension methods of "IEnumerable<T>"
?
‑‑‑‑‑
參考解法
方法 1:
I'm assuming here that you have multiple Customer objects with the same Id but with different Cities (if this isn't the case and the inner dictionary will always contain one item, go with @oleksii's answer).
var result = customers.GroupBy(c => c.Id)
.ToDictionary(group => group.Key,
group => group.ToDictionary(c => c.City,
c => c.DidLive));
Of course, this will throw an exception if there multiple customers with identical Ids and Cities.
方法 2:
That's a place to start
var data = new List<Customer>();
data.ToDictionary(item => item.ID,
item => new Dictionary<string, bool>
{
{item.City,item.DidLive}
});