题目
具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出。
输出:
{
中国: {
广东: {
广州: {
越秀区: {}
}
},
浙江: {
杭州: {}
}
}
}
思路
按空格拆分之后,递归放入Directory。
解法
using System.Collections;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
/*
* 具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出
*
* 输出
* {
* 中国: {
* 广东: {
* 广州: {
* 越秀区: {}
* }
* },
* 浙江: {
* 杭州: {}
* }
* }
* }
*
*/
string[] data = new string[] { "中国 浙江 杭州", "中国", "中国 广东", "中国 广东 广州 越秀区", "中国 达拉崩吧 广州" };
Dictionary<string, IDictionary> res = new Dictionary<string, IDictionary>();
foreach (string key in data)
{
if (string.IsNullOrEmpty(key))
continue;
AddToDictionary(res, key.Split(' '), 0);
}
var result = Serialize(res);
Console.WriteLine(result);
void AddToDictionary(Dictionary<string, IDictionary> result, string[] source, int index)
{
if (index == source.Length)
return;
if (result == null)
result = new Dictionary<string, IDictionary>();
if (!result.ContainsKey(source[index]))
result.Add(source[index], new Dictionary<string, IDictionary>());
AddToDictionary((Dictionary<string, IDictionary>)result[source[index]], source, index + 1);
return;
}
string Serialize(Dictionary<string, IDictionary> res)
{
JsonSerializerOptions options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
};
string stuStr2 = JsonSerializer.Serialize(res, options);
return stuStr2;
}
文章评论