夸克之书

  • 首页
  • 科普
  • 笔记
  • C#
  • 物联网
  • 算法
  • Linux
  • 树莓派
夸克之内,别有洞天
  1. 首页
  2. 算法
  3. 正文

【算法】具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出

2022-02-15 273点热度 0人点赞 0条评论

题目

具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 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;
}

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022-02-15

afirefish

这个人很懒,什么都没留下

打赏 点赞

文章评论

您需要 登录 之后才可以评论
放松一下
https://www.quarkbook.com/wp-content/uploads/2021/05/凤凰传奇-海底(Live).flac
分类
  • C#
  • Linux
  • 树莓派
  • 物联网
  • 科普
  • 笔记
  • 算法
  • 默认
最新 热点 随机
最新 热点 随机
Windows移除多余输入法'Unknown Locale (qaa-Latn)' 【算法】具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出 树莓派安装Golang环境 树莓派 Zero USB/以太网方式连接配置教程 树莓派Zero 2 w超频 PVE使用山克UPS(ViewPower)
解决Visual Studio 2022中无法编译 .NET Framework 4.5/4.5.1项目(Visual Studio 2022安装.NET Framework 4.5)PVE使用山克UPS(ViewPower)树莓派Zero 2 w超频树莓派 Zero USB/以太网方式连接配置教程树莓派安装Golang环境【算法】具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出
Ubuntu/Debian安装Frps并设置开机启动 OpenWrt x86安装Frpc 宝塔面板反向代理域名IP变化时无法访问 在.NET 6中System.Drawing.Common引发的“The type initializer for 'Gdip' threw an exception.”异常 树莓派.Net Core Iot入门系列篇(6):PWM 严肃一点的排序算法(1) - 睡眠排序
最近评论
去月球 发布于 4 个月前(01月17日) 如果使用CSI的摄像头应该怎么修改命令呢
Me 发布于 5 个月前(12月31日) 好像还得写启动项 要不重启就还原了。
十三 发布于 5 个月前(12月23日) 大神,网盘链接失效了,重新分享一下吧,
一键快乐 发布于 11 个月前(07月09日) 老哥 我替换之后能进去了但是网络和声音上有两个×怎么办
翩翩蒯公子 Maxwell 发布于 1 年前(05月15日) 赞一个,挺好的文章。
书签
  • 打赏
  • 毒鸡汤(有点意思)
  • 米店
  • 金鱼直播间

COPYRIGHT © 2022 quarkbook.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备15036129号-9

登录
注册|忘记密码?