如何将指定邮政编码与数组匹配并获取对应PSHid?
邮政编码匹配并获取对应城市PSHid的实现方案
你可以通过遍历所有州的城市列表,检查每个城市的邮政编码数组是否包含目标邮编,找到匹配项后提取对应的PSHid。以下是修改后的完整代码:
using Newtonsoft.Json; using System.Threading.Tasks; using System.Net.Http; using System.Linq; using System; namespace ConsoleApp1 { public class Program { static async Task Main(string[] args) { string url = "https://raw.githubusercontent.com/kayh1105/msiaPostcodes/main/ShortList_MsiaCitiesPostcodes"; HttpClient httpClient = new HttpClient(); var httpResponseMessage = await httpClient.GetAsync(url); string jsonResponse = await httpResponseMessage.Content.ReadAsStringAsync(); var data = JsonConvert.DeserializeObject<MsiaPostcode>(jsonResponse); // 目标邮政编码 string targetPostcode = "50000"; // 匹配逻辑 var matchedCity = data.state .SelectMany(s => s.city) // 扁平化所有城市列表 .FirstOrDefault(c => c.postcode.Contains(targetPostcode)); if (matchedCity != null) { Console.WriteLine($"匹配到的PSHid:{matchedCity.PSHid}"); Console.WriteLine($"对应城市:{matchedCity.name}"); } else { Console.WriteLine("未找到匹配的邮政编码"); } } } public class MsiaPostcode { public _State[] state { get; set; } } public class _State { public string name { get; set; } public _City[] city { get; set; } } public class _City { public string name { get; set; } public int PSHid { get; set; } public string[] postcode { get; set; } } }
关键逻辑说明
SelectMany(s => s.city):将嵌套的州-城市结构扁平化,直接得到所有城市的集合,避免多层嵌套循环。FirstOrDefault(c => c.postcode.Contains(targetPostcode)):遍历所有城市,找到第一个邮政编码数组包含目标邮编的城市对象。- 空值判断:如果没有匹配到任何城市,会返回
null,需要处理这种情况避免空引用异常。
示例运行结果
当targetPostcode设为"50000"时,控制台输出:
匹配到的PSHid:1 对应城市:Kuala Lumpur
内容的提问来源于stack exchange,提问作者akayh
相关产品推荐
相关产品推荐

