using System.Globalization;
using System.Text.Json;
namespace JiDangJia.Core;
public static class CityCatalog
{
private static readonly Lazy<Dictionary<string,List<string>>> data=new(()=>
{
using var stream=typeof(CityCatalog).Assembly.GetManifestResourceStream("JiDangJia.Core.Data.china-cities.json")!;
var rows=JsonSerializer.Deserialize<Dictionary<string,List<string>>>(stream)!;
foreach(var name in new[]{"北京市","天津市","上海市","重庆市"})rows[name]=[name];
rows["香港特别行政区"]=["香港"];rows["澳门特别行政区"]=["澳门"];
rows["台湾省"]=["台北","台中","台南","高雄","新北","基隆","新竹","嘉义","桃园","宜兰","花莲","台东","澎湖","屏东","南投","彰化","云林","苗栗","新竹县","嘉义县","金门","连江"];
return rows.OrderBy(p=>p.Key,Comparer<string>.Create((a,b)=>CultureInfo.GetCultureInfo("zh-CN").CompareInfo.Compare(a,b))).ToDictionary(p=>p.Key,p=>p.Value.Distinct().OrderBy(v=>v,Comparer<string>.Create((a,b)=>CultureInfo.GetCultureInfo("zh-CN").CompareInfo.Compare(a,b))).ToList());
});
public static IReadOnlyDictionary<string,List<string>> Provinces=>data.Value;
public static string Normalize(string city)=>city.Trim().EndsWith('市')?city.Trim()[..^1]:city.Trim();
public static string Province(string city)=>Provinces.FirstOrDefault(p=>p.Value.Any(v=>Normalize(v)==Normalize(city))).Key??"";
}
using System.Globalization;
using System.Text.Json;
namespace JiDangJia.Core;
public static class CityCatalog
{
private static readonly Lazy<Dictionary<string,List<string>>> data=new(()=>
{
using var stream=typeof(CityCatalog).Assembly.GetManifestResourceStream("JiDangJia.Core.Data.china-cities.json")!;
var rows=JsonSerializer.Deserialize<Dictionary<string,List<string>>>(stream)!;
foreach(var name in new[]{"北京市","天津市","上海市","重庆市"})rows[name]=[name];
rows["香港特别行政区"]=["香港"];rows["澳门特别行政区"]=["澳门"];
rows["台湾省"]=["台北","台中","台南","高雄","新北","基隆","新竹","嘉义","桃园","宜兰","花莲","台东","澎湖","屏东","南投","彰化","云林","苗栗","新竹县","嘉义县","金门","连江"];
return rows.OrderBy(p=>p.Key,Comparer<string>.Create((a,b)=>CultureInfo.GetCultureInfo("zh-CN").CompareInfo.Compare(a,b))).ToDictionary(p=>p.Key,p=>p.Value.Distinct().OrderBy(v=>v,Comparer<string>.Create((a,b)=>CultureInfo.GetCultureInfo("zh-CN").CompareInfo.Compare(a,b))).ToList());
});
public static IReadOnlyDictionary<string,List<string>> Provinces=>data.Value;
public static string Normalize(string city)=>city.Trim().EndsWith('市')?city.Trim()[..^1]:city.Trim();
public static string Province(string city)=>Provinces.FirstOrDefault(p=>p.Value.Any(v=>Normalize(v)==Normalize(city))).Key??"";
}