Last active
September 6, 2020 12:39
-
-
Save matarillo/42087e29fce19be05d241689a9839450 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var rawItems = GetRawitems(); | |
var organizations = ToOrganizations(rawItems); | |
Console.WriteLine(organizations.First()); | |
} | |
static IReadOnlyList<Organization> ToOrganizations(IEnumerable<RawItem> organizations) | |
{ | |
IReadOnlyList<Organization> Concat(IReadOnlyList<Organization> orgs, Organization org) | |
{ | |
var vector = new List<Organization>(orgs.Count + 1); | |
if (orgs.Count > 0 && orgs[orgs.Count - 1].Name == org.Name) | |
{ | |
var last = orgs[orgs.Count - 1]; | |
vector.AddRange(orgs.Take(orgs.Count - 1)); | |
vector.Add(new Organization(last.Id, last.Name, org.Children.Aggregate(last.Children, Concat))); | |
} | |
else | |
{ | |
vector.AddRange(orgs); | |
vector.Add(org); | |
} | |
return vector.AsReadOnly(); | |
} | |
var empty = new Organization[0]; | |
Organization[] single(Organization org) => new Organization[1] { org }; | |
return organizations.Aggregate(empty as IReadOnlyList<Organization>, (orgs, r) => | |
{ | |
var lv4 = r.OrganizationLv4 != null ? single(new Organization(r.Id, r.OrganizationLv4)) : empty; | |
var lv3 = r.OrganizationLv3 != null ? single(new Organization(r.Id, r.OrganizationLv3, lv4)) : empty; | |
var lv2 = r.OrganizationLv2 != null ? single(new Organization(r.Id, r.OrganizationLv2, lv3)) : empty; | |
var lv1 = new Organization(r.Id, r.OrganizationLv1, lv2); | |
return Concat(orgs, lv1); | |
}); | |
} | |
static RawItem[] GetRawitems() | |
{ | |
return new[] | |
{ | |
new RawItem { Id="Z0000", OrganizationLv1="座間市" }, | |
new RawItem { Id="Z0100", OrganizationLv1="座間市", OrganizationLv2="市長室" }, | |
new RawItem { Id="Z0110", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="市政戦略課" }, | |
new RawItem { Id="Z0111", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="市政戦略課", OrganizationLv4="市政戦略係" }, | |
new RawItem { Id="Z0112", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="市政戦略課", OrganizationLv4="広報戦略係" }, | |
new RawItem { Id="Z0120", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="渉外課" }, | |
new RawItem { Id="Z0121", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="渉外課", OrganizationLv4="交流・基地対策係" }, | |
new RawItem { Id="Z0130", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="危機管理課" }, | |
new RawItem { Id="Z0131", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="危機管理課", OrganizationLv4="危機管理・防災係" }, | |
new RawItem { Id="Z0140", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="秘書課" }, | |
new RawItem { Id="Z0141", OrganizationLv1="座間市", OrganizationLv2="市長室", OrganizationLv3="秘書課", OrganizationLv4="秘書係" }, | |
new RawItem { Id="Z0200", OrganizationLv1="座間市", OrganizationLv2="企画財政部" }, | |
new RawItem { Id="Z0210", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="企画政策課" }, | |
new RawItem { Id="Z0211", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="企画政策課", OrganizationLv4="企画政策係" }, | |
new RawItem { Id="Z0212", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="企画政策課", OrganizationLv4="事務管理係" }, | |
new RawItem { Id="Z0213", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="企画政策課", OrganizationLv4="特別定額給付金担当" }, | |
new RawItem { Id="Z0220", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="財政課" }, | |
new RawItem { Id="Z0221", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="財政課", OrganizationLv4="財政係" }, | |
new RawItem { Id="Z0230", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="市民税課" }, | |
new RawItem { Id="Z0231", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="市民税課", OrganizationLv4="諸税係" }, | |
new RawItem { Id="Z0232", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="市民税課", OrganizationLv4="市民税係" }, | |
new RawItem { Id="Z0240", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="固定資産税課" }, | |
new RawItem { Id="Z0241", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="固定資産税課", OrganizationLv4="土地係" }, | |
new RawItem { Id="Z0242", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="固定資産税課", OrganizationLv4="家屋係" }, | |
new RawItem { Id="Z0250", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="収納課" }, | |
new RawItem { Id="Z0251", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="収納課", OrganizationLv4="収納対策係" }, | |
new RawItem { Id="Z0252", OrganizationLv1="座間市", OrganizationLv2="企画財政部", OrganizationLv3="収納課", OrganizationLv4="整理係" }, | |
new RawItem { Id="Z0300", OrganizationLv1="座間市", OrganizationLv2="総務部" }, | |
new RawItem { Id="Z0310", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="文書法制課" }, | |
new RawItem { Id="Z0311", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="文書法制課", OrganizationLv4="情報公開係" }, | |
new RawItem { Id="Z0312", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="文書法制課", OrganizationLv4="法制係" }, | |
new RawItem { Id="Z0320", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="職員課" }, | |
new RawItem { Id="Z0321", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="職員課", OrganizationLv4="人事研修係" }, | |
new RawItem { Id="Z0322", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="職員課", OrganizationLv4="給与厚生係" }, | |
new RawItem { Id="Z0330", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="財産管理課" }, | |
new RawItem { Id="Z0331", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="財産管理課", OrganizationLv4="財産管理係" }, | |
new RawItem { Id="Z0332", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="財産管理課", OrganizationLv4="用地係" }, | |
new RawItem { Id="Z0340", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="契約検査課" }, | |
new RawItem { Id="Z0341", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="契約検査課", OrganizationLv4="契約係" }, | |
new RawItem { Id="Z0342", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="契約検査課", OrganizationLv4="検査担当" }, | |
new RawItem { Id="Z0350", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="情報システム課" }, | |
new RawItem { Id="Z0351", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="情報システム課", OrganizationLv4="情報システム係" }, | |
new RawItem { Id="Z0352", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="情報システム課", OrganizationLv4="情報企画係" }, | |
new RawItem { Id="Z0353", OrganizationLv1="座間市", OrganizationLv2="総務部", OrganizationLv3="情報システム課", OrganizationLv4="統計担当" }, | |
new RawItem { Id="Z0400", OrganizationLv1="座間市", OrganizationLv2="市民部" }, | |
new RawItem { Id="Z0410", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="市民協働課" }, | |
new RawItem { Id="Z0411", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="市民協働課", OrganizationLv4="市民活動係" }, | |
new RawItem { Id="Z0412", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="市民協働課", OrganizationLv4="交通防犯係" }, | |
new RawItem { Id="Z0420", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="戸籍住民課" }, | |
new RawItem { Id="Z0421", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="戸籍住民課", OrganizationLv4="窓口係" }, | |
new RawItem { Id="Z0422", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="戸籍住民課", OrganizationLv4="戸籍係" }, | |
new RawItem { Id="Z0430", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="広聴人権課" }, | |
new RawItem { Id="Z0431", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="広聴人権課", OrganizationLv4="広聴相談係" }, | |
new RawItem { Id="Z0432", OrganizationLv1="座間市", OrganizationLv2="市民部", OrganizationLv3="広聴人権課", OrganizationLv4="人権・男女共同参画係" }, | |
new RawItem { Id="Z0500", OrganizationLv1="座間市", OrganizationLv2="環境経済部" }, | |
new RawItem { Id="Z0510", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="環境政策課" }, | |
new RawItem { Id="Z0511", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="環境政策課", OrganizationLv4="環境政策係" }, | |
new RawItem { Id="Z0512", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="環境政策課", OrganizationLv4="環境保全係" }, | |
new RawItem { Id="Z0520", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="資源対策課" }, | |
new RawItem { Id="Z0521", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="資源対策課", OrganizationLv4="資源対策係" }, | |
new RawItem { Id="Z0522", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="資源対策課", OrganizationLv4="業務係" }, | |
new RawItem { Id="Z0530", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="商工観光課" }, | |
new RawItem { Id="Z0531", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="商工観光課", OrganizationLv4="商工観光係" }, | |
new RawItem { Id="Z0540", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="農政課" }, | |
new RawItem { Id="Z0541", OrganizationLv1="座間市", OrganizationLv2="環境経済部", OrganizationLv3="農政課", OrganizationLv4="農政係" }, | |
new RawItem { Id="Z0600", OrganizationLv1="座間市", OrganizationLv2="健康部" }, | |
new RawItem { Id="Z0610", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="健康づくり課" }, | |
new RawItem { Id="Z0611", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="健康づくり課", OrganizationLv4="健康づくり係" }, | |
new RawItem { Id="Z0612", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="健康づくり課", OrganizationLv4="保健予防係" }, | |
new RawItem { Id="Z0620", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="スポーツ課" }, | |
new RawItem { Id="Z0621", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="スポーツ課", OrganizationLv4="振興係" }, | |
new RawItem { Id="Z0622", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="スポーツ課", OrganizationLv4="施設係" }, | |
new RawItem { Id="Z0630", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="医療課" }, | |
new RawItem { Id="Z0631", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="医療課", OrganizationLv4="医療対策係" }, | |
new RawItem { Id="Z0632", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="医療課", OrganizationLv4="医療給付係" }, | |
new RawItem { Id="Z0640", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="国保年金課" }, | |
new RawItem { Id="Z0641", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="国保年金課", OrganizationLv4="国保係" }, | |
new RawItem { Id="Z0642", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="国保年金課", OrganizationLv4="給付係" }, | |
new RawItem { Id="Z0643", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="国保年金課", OrganizationLv4="年金係" }, | |
new RawItem { Id="Z0650", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="介護保険課" }, | |
new RawItem { Id="Z0651", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="介護保険課", OrganizationLv4="保険係" }, | |
new RawItem { Id="Z0652", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="介護保険課", OrganizationLv4="認定係" }, | |
new RawItem { Id="Z0653", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="介護保険課", OrganizationLv4="事業者支援係" }, | |
new RawItem { Id="Z0654", OrganizationLv1="座間市", OrganizationLv2="健康部", OrganizationLv3="介護保険課", OrganizationLv4="地域支援係" }, | |
new RawItem { Id="Z0600", OrganizationLv1="座間市", OrganizationLv2="福祉部" }, | |
new RawItem { Id="Z0610", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="福祉長寿課" }, | |
new RawItem { Id="Z0611", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="福祉長寿課", OrganizationLv4="福祉総務係" }, | |
new RawItem { Id="Z0612", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="福祉長寿課", OrganizationLv4="長寿係" }, | |
new RawItem { Id="Z0620", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="障がい福祉課" }, | |
new RawItem { Id="Z0621", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="障がい福祉課", OrganizationLv4="障がい福祉係" }, | |
new RawItem { Id="Z0622", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="障がい福祉課", OrganizationLv4="障がい者支援係" }, | |
new RawItem { Id="Z0630", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="生活援護課" }, | |
new RawItem { Id="Z0631", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="生活援護課", OrganizationLv4="経理係" }, | |
new RawItem { Id="Z0632", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="生活援護課", OrganizationLv4="生活援護第1係" }, | |
new RawItem { Id="Z0633", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="生活援護課", OrganizationLv4="生活援護第2係" }, | |
new RawItem { Id="Z0634", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="生活援護課", OrganizationLv4="生活援護第3係" }, | |
new RawItem { Id="Z0635", OrganizationLv1="座間市", OrganizationLv2="福祉部", OrganizationLv3="生活援護課", OrganizationLv4="自立サポート担当" }, | |
new RawItem { Id="Z0700", OrganizationLv1="座間市", OrganizationLv2="子ども未来部" }, | |
new RawItem { Id="Z0710", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="子ども政策課" }, | |
new RawItem { Id="Z0711", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="子ども政策課", OrganizationLv4="子ども政策係" }, | |
new RawItem { Id="Z0712", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="子ども政策課", OrganizationLv4="児童相談係" }, | |
new RawItem { Id="Z0720", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="子ども育成課" }, | |
new RawItem { Id="Z0721", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="子ども育成課", OrganizationLv4="子ども育成係" }, | |
new RawItem { Id="Z0722", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="子ども育成課", OrganizationLv4="児童支援係" }, | |
new RawItem { Id="Z0730", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="保育課" }, | |
new RawItem { Id="Z0731", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="保育課", OrganizationLv4="庶務施設係" }, | |
new RawItem { Id="Z0732", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="保育課", OrganizationLv4="保育係" }, | |
new RawItem { Id="Z0740", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="青少年課" }, | |
new RawItem { Id="Z0741", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="青少年課", OrganizationLv4="青少年係" }, | |
new RawItem { Id="Z0742", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="青少年課", OrganizationLv4="青少年相談室" }, | |
new RawItem { Id="Z0743", OrganizationLv1="座間市", OrganizationLv2="子ども未来部", OrganizationLv3="青少年課", OrganizationLv4="青少年センター" }, | |
new RawItem { Id="Z0800", OrganizationLv1="座間市", OrganizationLv2="都市部" }, | |
new RawItem { Id="Z0810", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="都市計画課" }, | |
new RawItem { Id="Z0811", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="都市計画課", OrganizationLv4="都市計画係" }, | |
new RawItem { Id="Z0812", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="都市計画課", OrganizationLv4="市街地整備係" }, | |
new RawItem { Id="Z0820", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="公園緑政課" }, | |
new RawItem { Id="Z0821", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="公園緑政課", OrganizationLv4="緑政係" }, | |
new RawItem { Id="Z0822", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="公園緑政課", OrganizationLv4="施設係" }, | |
new RawItem { Id="Z0830", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="建築住宅課" }, | |
new RawItem { Id="Z0831", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="建築住宅課", OrganizationLv4="建築係" }, | |
new RawItem { Id="Z0832", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="建築住宅課", OrganizationLv4="指導係" }, | |
new RawItem { Id="Z0833", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="建築住宅課", OrganizationLv4="市営住宅係" }, | |
new RawItem { Id="Z0840", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="道路課" }, | |
new RawItem { Id="Z0841", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="道路課", OrganizationLv4="管理係" }, | |
new RawItem { Id="Z0842", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="道路課", OrganizationLv4="整備係" }, | |
new RawItem { Id="Z0843", OrganizationLv1="座間市", OrganizationLv2="都市部", OrganizationLv3="道路課", OrganizationLv4="維持補修係" }, | |
new RawItem { Id="Z0900", OrganizationLv1="座間市", OrganizationLv2="会計管理者" }, | |
new RawItem { Id="Z0910", OrganizationLv1="座間市", OrganizationLv2="会計管理者", OrganizationLv3="会計課" }, | |
new RawItem { Id="Z0911", OrganizationLv1="座間市", OrganizationLv2="会計管理者", OrganizationLv3="会計課", OrganizationLv4="会計係" } | |
}; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment