using System;using System.Collections.Generic;using System.Linq;publicclassState{publicstaticstringByState(string str){var states =newDictionary<string,string>(){{"AZ","Arizona"},{"CA","California"},{"ID","Idaho"},{"IN","Indiana"},{"MA","Massachusetts"},{"OK","Oklahoma"},{"PA","Pennsylvania"},{"VA","Virginia"}};var rows = str.Split(newstring[]{"\n"}, StringSplitOptions.RemoveEmptyEntries).Select(r=>{var state = states.FirstOrDefault(s=> r.Contains(s.Key));var row = r.Replace(",","").Replace(state.Key,state.Value);returnnew{
State = state.Value,
Row = row.Trim()};}).OrderBy(i=>i.State);var result = rows.GroupBy(r=>r.State).Select(i=> i.Key +"\n..... "+string.Join("\n..... ",i.Select(e=>e.Row).OrderBy(e=>e)));returnstring.Join("\n ",result);}}
答案8:
using System;using System.Collections.Generic;using System.Linq;publicclassState{privatestaticreadonly Dictionary<string,string> StateNames =newDictionary<string,string>(){{"AZ","Arizona"},{"CA","California"},{"ID","Idaho"},{"IN","Indiana"},{"MA","Massachusetts"},{"OK","Oklahoma"},{"PA","Pennsylvania"},{"VA","Virginia"}};privateclassAddressEntry{publicstring Name {get;set;}publicstring Address {get;set;}publicstring City {get;set;}publicstring State {get;set;}publicstring StateName {get=> StateNames[State];}}publicstaticstringByState(string str){// Throw out invalid inputif(string.IsNullOrWhiteSpace(str))returnstring.Empty;// Parse the string into a list of address entriesvar addressBook =newList<AddressEntry>();var records = str.Split(newchar[]{'\n'}, StringSplitOptions.RemoveEmptyEntries);foreach(var record in records){var parts = record.Split(newchar[]{','}, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray();var city = parts[2].Substring(0, parts[2].Length -3);var state = parts[2].Substring(parts[2].Length -2,2);var entry =newAddressEntry(){ Name = parts[0], Address = parts[1], City = city, State = state };
addressBook.Add(entry);}// Build the output formatted appropriatelyvar list =newList<string>();foreach(vargroupin addressBook.GroupBy(e => e.StateName).OrderBy(g => g.Key)){
list.Add($" {group.Key}");foreach(var entry ingroup.OrderBy(e => e.Name)){
list.Add($"..... {entry.Name} {entry.Address} {entry.City} {entry.StateName}");}}returnstring.Join("\n", list).Substring(1);}}
答案9:
using System;using System.Collections.Generic;using System.Linq;publicclassState{publicstaticstringByState(string str){
Dictionary<string,string> States =newDictionary<string,string>(){{"AZ","Arizona"},{"CA","California"},{"ID","Idaho"},{"IN","Indiana"},{"MA","Massachusetts"},{"OK","Oklahoma"},{"PA","Pennsylvania"},{"VA","Virginia"}};
Dictionary<string, List<string>> output =newDictionary<string, List<string>>(){{"AZ",newList<string>()},{"CA",newList<string>()},{"ID",newList<string>()},{"IN",newList<string>()},{"VA",newList<string>()},{"OK",newList<string>()},{"PA",newList<string>()},{"MA",newList<string>()}};var arr = str.Split('\n');foreach(string ss in arr){foreach(KeyValuePair<string, List<string>> state in output){if(ss.Contains(state.Key)){
output[state.Key].Add(ss.Replace(state.Key, States[state.Key]));break;}}}var prepare ="";foreach(var elem in output.OrderBy(x => x.Key)){if(elem.Value.Count !=0){
prepare +=(prepare !=""?" ":"")+ States[elem.Key]+"\n";foreach(var people in elem.Value.OrderBy(z => z.Split(',')[0]).ThenBy(z => z.Split(',')[1]).ThenBy(z => z.Split(',')[2]).ToList()){
prepare +="..... "+ people.Replace(",",string.Empty)+"\n";}}}return prepare.Substring(0, prepare.Length -1);}}
答案10:
using System;using System.Collections.Generic;using System.Linq;using System.Text;publicclassState{publicstaticstringByState(string str){
List<string> stringList1 = str.Split(newstring[]{"\n"}, StringSplitOptions.None).OrderBy(s => s.Substring(s.Length -2,2)).ToList();var novaGrupiranaLista = stringList1.GroupBy(s => s.Substring(s.Length-2,2));string output ="";int counter =0;foreach(vargroupin novaGrupiranaLista){string state="";
counter++;switch(group.Key){case"AZ":
state ="Arizona";break;case"CA":
state ="California";break;case"ID":
state ="Idaho";break;case"IN":
state ="Indiana";break;case"MA":
state ="Massachusetts";break;case"OK":
state ="Oklahoma";break;case"PA":
state ="Pennsylvania";break;case"VA":
state ="Virginia";break;}string space ="";if(counter!=1){
space =" ";}
output = output + space+state+"\n";foreach(var item ingroup.OrderBy(s=> s)){
output=output+"..... "+item.Substring(0,item.Length-3)+" "+ state+"\n";}}
output = output.TrimEnd(newchar[]{'\n'}).Replace(",","");return output;}}