从 MultiDictionary 获取所有键
Get all Keys from a MultiDictionary
我正在寻找一种方法来获取 multiDictionary 的所有一级键,但我完全无法获取它们(用于调试目的)
我这样声明字典:
private Dictionary<string, Dictionary<string, Packet>> PacketsStore = new Dictionary<string, Dictionary<string, Packet>>();
那么我怎样才能打印出所有基本键的列表?
我怎么才能打印出二级密钥,以防我以后需要它...
提前致谢!
对于所有键,尝试:
var keys = PacketsStore.Keys.ToArray();
对于二级密钥:
List<string> secondaryKeys;
foreach (var key in keys)
{
secondaryKeys.AddRange(PacketStore[key].Keys.ToArray());
}
foreach(KeyValuePair<string, Dictionary<string, Packet>> entry in PacketsStore)
{
string key = entry.Key; // first level
foreach(KeyValuePair<string, Packet> entryInner in entry.Value)
{
string keyInner = entryInner.Key // second level
}
}
我已将键放入变量中,您可以将其放入某些集合中。目的是获得钥匙:)
一级,众所周知的方式:
var allKeys = PacketsStore.Keys;
子字典键,LINQ方式:
var allSubKeys = PacketsStore.SelectMany(pair => pair.Value.Keys);
OP 已经在其他答案中注释掉了两个嵌套的 foreach
循环更适合调试目的,但是,毕竟如果 OP 想要将所有子键输出到控制台,它仍然可以完成单线解决方案:
// One-liner solution!
PacketsStore.SelectMany(pair => pair.Value.Keys).ToList().ForEach(Console.WriteLine);
我正在寻找一种方法来获取 multiDictionary 的所有一级键,但我完全无法获取它们(用于调试目的)
我这样声明字典:
private Dictionary<string, Dictionary<string, Packet>> PacketsStore = new Dictionary<string, Dictionary<string, Packet>>();
那么我怎样才能打印出所有基本键的列表?
我怎么才能打印出二级密钥,以防我以后需要它...
提前致谢!
对于所有键,尝试:
var keys = PacketsStore.Keys.ToArray();
对于二级密钥:
List<string> secondaryKeys;
foreach (var key in keys)
{
secondaryKeys.AddRange(PacketStore[key].Keys.ToArray());
}
foreach(KeyValuePair<string, Dictionary<string, Packet>> entry in PacketsStore)
{
string key = entry.Key; // first level
foreach(KeyValuePair<string, Packet> entryInner in entry.Value)
{
string keyInner = entryInner.Key // second level
}
}
我已将键放入变量中,您可以将其放入某些集合中。目的是获得钥匙:)
一级,众所周知的方式:
var allKeys = PacketsStore.Keys;
子字典键,LINQ方式:
var allSubKeys = PacketsStore.SelectMany(pair => pair.Value.Keys);
OP 已经在其他答案中注释掉了两个嵌套的 foreach
循环更适合调试目的,但是,毕竟如果 OP 想要将所有子键输出到控制台,它仍然可以完成单线解决方案:
// One-liner solution!
PacketsStore.SelectMany(pair => pair.Value.Keys).ToList().ForEach(Console.WriteLine);