49. Recursive Dictionary

לפעמים אנחנו רוצים ליצור מבנה נתונים מקונן:

למשל:

1
Dictionary<string, Dictionary<string, int>> firstNameToLastNameToId;

ואז למשל נוכל לעשות משהו כזה:

1
firstNameToLastNameToId["John"]["Doe"] = 3;

או יותר מדויק, כזה:

1
2
3
4
5
6
7
8
9
10
11
firstNameToLastNameToId =
new Dictionary<string, Dictionary<string, int>>()
{
{
"John", new Dictionary<string, int>()
{
{"Smith", 123456789},
{"Doe", 987654321}
}
}
};

עם זאת, לפעמים ייתכן ואנחנו רוצים שהקינון יהיה ללא הגבלה, למשל אם אנחנו רוצים לבנות איזשהו עץ.

אפשר לפתור את הבעיה בצורה הבאה:

1
2
3
4
public class NestedCollection<TKey> :
Dictionary<TKey, NestedCollection<TKey>>
{
}

ואז נוכל ליצור משהו כזה:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
NestedCollection<string> banaiFamily =
new NestedCollection<string>()
{
{
"Meir",
new NestedCollection<string>()
{
{
"Jacob",
new NestedCollection<string>() {{"Ehud", null}}
},
{
"Yossi",
new NestedCollection<string>() {{"Yuval", null}}
},
{
"Yizhak",
new NestedCollection<string>()
{
{"Meir", null},
{"Orna", null},
{"Evyatar", null}
}
},
{
"Haim",
null
}
}
}
};

מגניב, לא?

יום מעולה

שתף