2010-10-13 19 views
13

Esiste una funzionalità .NET incorporata per la creazione di abbreviazioni di stato al di fuori dei nomi di stato?Creazione di abbreviazioni di stato da nomi di stato

So che la funzione non sarebbe difficile da scrivere, ma presumo che MS ha pensato a un modo più efficiente di quanto segue x50:

if statename.tolower = "new york" then 
    statename = "NY" 
else if 

altri pensieri di rendere questo più efficienti sono anche apprezzato.

+3

@DMan ero solo curioso di sapere se v'è stato preesistente funzionalità là fuori. Non ho bisogno di reinventare la ruota. – Jim

+0

http://codesqueeze.com/the-most-reusable-piece-of-code-everperiod/ – b729sefc

risposta

2
if statename.tolower == "new york" then 
    statename = "NY" 
else if 

quindi se avete intenzione di seguire questa strada lo farei:

  1. Utilizzare un'istruzione switch invece di if else switch(state.ToLower()). Questo sarà più efficiente di se poi le dichiarazioni. Il compilatore ottimizzerà l'istruzione switch.

  2. Se è assolutamente necessario utilizzare un'istruzione if if then. Do

    string lowerCaseState = state.ToLower().
    se (lowerCaseState == "New York") {....} else if ...

In questo modo si sta creando una stringa di lettere minuscole una volta (le stringhe sono immutabili) al posto di ogni parte la se poi dichiarazione.

In verità, probabilmente utilizzerei un'istruzione switch con un metodo statico.

  1. nomi dello Stato non cambieranno
  2. abbreviazioni statali non cambieranno.

È possibile creare un oggetto per memorizzare i valori per caricarli ogni volta che si esegue il programma, ma perché? Si potrebbe anche consentire al compilatore di ottimizzare l'accesso per valori statici che non cambiano.

11

È necessario utilizzare uno Dictionary<String, String> con StringComparer.OrdinalIgnoreCase.

+0

Non ho mai usato un dizionario, puoi spiegare ulteriormente? – Jim

+0

var d = nuovo dizionario { –

1

Un database con il campo nome dello stato indicizzato (indice cluster se questo è il campo che si sta andando a cercare il più delle volte) in modo che ricerca sarebbe efficiente e una query restituire la sigla dello stato:

select s.[StateAbbreviation] 
from [dbo].[State] s 
where s.[StateName] = @StateName; 

Questo ha il vantaggio di essere riutilizzabile in molte applicazioni e ambienti.

72

Spero che questo aiuta

public string GetState(State state) 
    { 
     switch (state) 
     { 
      case State.AL: 
       return "ALABAMA"; 

      case State.AK: 
       return "ALASKA"; 

      case State.AS: 
       return "AMERICAN SAMOA"; 

      case State.AZ: 
       return "ARIZONA"; 

      case State.AR: 
       return "ARKANSAS"; 

      case State.CA: 
       return "CALIFORNIA"; 

      case State.CO: 
       return "COLORADO"; 

      case State.CT: 
       return "CONNECTICUT"; 

      case State.DE: 
       return "DELAWARE"; 

      case State.DC: 
       return "DISTRICT OF COLUMBIA"; 

      case State.FM: 
       return "FEDERATED STATES OF MICRONESIA"; 

      case State.FL: 
       return "FLORIDA"; 

      case State.GA: 
       return "GEORGIA"; 

      case State.GU: 
       return "GUAM"; 

      case State.HI: 
       return "HAWAII"; 

      case State.ID: 
       return "IDAHO"; 

      case State.IL: 
       return "ILLINOIS"; 

      case State.IN: 
       return "INDIANA"; 

      case State.IA: 
       return "IOWA"; 

      case State.KS: 
       return "KANSAS"; 

      case State.KY: 
       return "KENTUCKY"; 

      case State.LA: 
       return "LOUISIANA"; 

      case State.ME: 
       return "MAINE"; 

      case State.MH: 
       return "MARSHALL ISLANDS"; 

      case State.MD: 
       return "MARYLAND"; 

      case State.MA: 
       return "MASSACHUSETTS"; 

      case State.MI: 
       return "MICHIGAN"; 

      case State.MN: 
       return "MINNESOTA"; 

      case State.MS: 
       return "MISSISSIPPI"; 

      case State.MO: 
       return "MISSOURI"; 

      case State.MT: 
       return "MONTANA"; 

      case State.NE: 
       return "NEBRASKA"; 

      case State.NV: 
       return "NEVADA"; 

      case State.NH: 
       return "NEW HAMPSHIRE"; 

      case State.NJ: 
       return "NEW JERSEY"; 

      case State.NM: 
       return "NEW MEXICO"; 

      case State.NY: 
       return "NEW YORK"; 

      case State.NC: 
       return "NORTH CAROLINA"; 

      case State.ND: 
       return "NORTH DAKOTA"; 

      case State.MP: 
       return "NORTHERN MARIANA ISLANDS"; 

      case State.OH: 
       return "OHIO"; 

      case State.OK: 
       return "OKLAHOMA"; 

      case State.OR: 
       return "OREGON"; 

      case State.PW: 
       return "PALAU"; 

      case State.PA: 
       return "PENNSYLVANIA"; 

      case State.PR: 
       return "PUERTO RICO"; 

      case State.RI: 
       return "RHODE ISLAND"; 

      case State.SC: 
       return "SOUTH CAROLINA"; 

      case State.SD: 
       return "SOUTH DAKOTA"; 

      case State.TN: 
       return "TENNESSEE"; 

      case State.TX: 
       return "TEXAS"; 

      case State.UT: 
       return "UTAH"; 

      case State.VT: 
       return "VERMONT"; 

      case State.VI: 
       return "VIRGIN ISLANDS"; 

      case State.VA: 
       return "VIRGINIA"; 

      case State.WA: 
       return "WASHINGTON"; 

      case State.WV: 
       return "WEST VIRGINIA"; 

      case State.WI: 
       return "WISCONSIN"; 

      case State.WY: 
       return "WYOMING"; 
     } 

     throw new Exception("Not Available"); 
    } 
} 


public State GetStateByName(string name) 
     { 
      switch (name.ToUpper()) 
      { 
       case "ALABAMA": 
        return State.AL; 

       case "ALASKA": 
        return State.AK; 

       case "AMERICAN SAMOA": 
        return State.AS; 

       case "ARIZONA": 
        return State.AZ; 

       case "ARKANSAS": 
        return State.AR; 

       case "CALIFORNIA": 
        return State.CA; 

       case "COLORADO": 
        return State.CO; 

       case "CONNECTICUT": 
        return State.CT; 

       case "DELAWARE": 
        return State.DE; 

       case "DISTRICT OF COLUMBIA": 
        return State.DC; 

       case "FEDERATED STATES OF MICRONESIA": 
        return State.FM; 

       case "FLORIDA": 
        return State.FL; 

       case "GEORGIA": 
        return State.GA; 

       case "GUAM": 
        return State.GU; 

       case "HAWAII": 
        return State.HI; 

       case "IDAHO": 
        return State.ID; 

       case "ILLINOIS": 
        return State.IL; 

       case "INDIANA": 
        return State.IN; 

       case "IOWA": 
        return State.IA; 

       case "KANSAS": 
        return State.KS; 

       case "KENTUCKY": 
        return State.KY; 

       case "LOUISIANA": 
        return State.LA; 

       case "MAINE": 
        return State.ME; 

       case "MARSHALL ISLANDS": 
        return State.MH; 

       case "MARYLAND": 
        return State.MD; 

       case "MASSACHUSETTS": 
        return State.MA; 

       case "MICHIGAN": 
        return State.MI; 

       case "MINNESOTA": 
        return State.MN; 

       case "MISSISSIPPI": 
        return State.MS; 

       case "MISSOURI": 
        return State.MO; 

       case "MONTANA": 
        return State.MT; 

       case "NEBRASKA": 
        return State.NE; 

       case "NEVADA": 
        return State.NV; 

       case "NEW HAMPSHIRE": 
        return State.NH; 

       case "NEW JERSEY": 
        return State.NJ; 

       case "NEW MEXICO": 
        return State.NM; 

       case "NEW YORK": 
        return State.NY; 

       case "NORTH CAROLINA": 
        return State.NC; 

       case "NORTH DAKOTA": 
        return State.ND; 

       case "NORTHERN MARIANA ISLANDS": 
        return State.MP; 

       case "OHIO": 
        return State.OH; 

       case "OKLAHOMA": 
        return State.OK; 

       case "OREGON": 
        return State.OR; 

       case "PALAU": 
        return State.PW; 

       case "PENNSYLVANIA": 
        return State.PA; 

       case "PUERTO RICO": 
        return State.PR; 

       case "RHODE ISLAND": 
        return State.RI; 

       case "SOUTH CAROLINA": 
        return State.SC; 

       case "SOUTH DAKOTA": 
        return State.SD; 

       case "TENNESSEE": 
        return State.TN; 

       case "TEXAS": 
        return State.TX; 

       case "UTAH": 
        return State.UT; 

       case "VERMONT": 
        return State.VT; 

       case "VIRGIN ISLANDS": 
        return State.VI; 

       case "VIRGINIA": 
        return State.VA; 

       case "WASHINGTON": 
        return State.WA; 

       case "WEST VIRGINIA": 
        return State.WV; 

       case "WISCONSIN": 
        return State.WI; 

       case "WYOMING": 
        return State.WY; 
      } 

      throw new Exception("Not Available"); 
     } 

public enum State 
    { 
     AL, 
     AK, 
     AS, 
     AZ, 
     AR, 
     CA, 
     CO, 
     CT, 
     DE, 
     DC, 
     FM, 
     FL, 
     GA, 
     GU, 
     HI, 
     ID, 
     IL, 
     IN, 
     IA, 
     KS, 
     KY, 
     LA, 
     ME, 
     MH, 
     MD, 
     MA, 
     MI, 
     MN, 
     MS, 
     MO, 
     MT, 
     NE, 
     NV, 
     NH, 
     NJ, 
     NM, 
     NY, 
     NC, 
     ND, 
     MP, 
     OH, 
     OK, 
     OR, 
     PW, 
     PA, 
     PR, 
     RI, 
     SC, 
     SD, 
     TN, 
     TX, 
     UT, 
     VT, 
     VI, 
     VA, 
     WA, 
     WV, 
     WI, 
     WY 
    } 
+5

+1 per lo sforzo. – Jim

+6

+1 per avermi salvato un po 'di tempo. – thiag0

+4

Sei una persona meravigliosa, meravigliosa – attack

3

Ecco una funzione # C testato che prende l'abbreviazione stato americano e restituisce il nome completo dello stato. Usa un metodo di dizionario che è più compatto di un interruttore. Per rispondere alla tua domanda, puoi semplicemente scambiare le chiavi e i valori.

https://heuristically.wordpress.com/2011/04/19/csharp-dictionary-us-state-abbreivation-names-using-sas/

+0

ecco quello che usa Dictionary localman

+1

Yikes! Questo metodo ricostruisce il dizionario per * ogni ricerca *. Difficilmente efficiente. Il dizionario dovrebbe essere costruito una volta sola (o se necessario se sono presenti più stati) e successivamente interrogato più volte. –

0

Questo è tecnicamente fuori tema, ma sto raccogliendo se qualcuno è dopo codici provincia 2 lettera, poi paese è prossimo.ecco come si fa per ottenere i codici di paese 2 lettera, avendo prima il nome del paese:

protected string GetCountryCode(string country) 
    { 
     var v1 = (from c in CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
        where (new RegionInfo(c.LCID)).EnglishName != "" 
        || (new RegionInfo(c.LCID)).EnglishName != null 
        orderby (new RegionInfo(c.LCID)).EnglishName ascending 
        select new 
        { 
         Code = (new RegionInfo(c.LCID)).TwoLetterISORegionName, 
         Name = (new RegionInfo(c.LCID)).EnglishName 
        }).Distinct(); 

     string code = v1.Where(t => t.Name.ToLower() == country.ToLower()).FirstOrDefault().Code; 

     if (!string.IsNullOrEmpty(code)) 
      return code; 
     else return ""; 
    } 
5

Niente di male soluzioni offerte qui, ma vorrei suggerire un'altra opzione, che, a mio avviso, è un po 'meglio . Si potrebbe definire il seguente metodo di estensione Enum che utilizza l'attributo di riflessione e descrizione per ottenere il nome dello stato completo:

namespace System 
{ 
    public static class EnumExtensions 
    { 
     public static string GetDescription(this Enum value) 
     { 
      var fi = value.GetType().GetField(value.ToString()); 
      var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 
      return (attributes.Length > 0) ? attributes[0].Description : value.ToString(); 
     } 
    } 
} 

Fondamentalmente questo vi permetterà di effettuare le seguenti operazioni:

var stateName = State.AL.GetDescription(); 

Ora tutto ciò che serve è per decorare i valori del tuo enumeratore con l'attributo Descrizione:

public enum State 
{ 
    [Description("Alabama") 
    AL, 
    [Description("Alaska") 
    AK 
} 

E il metodo di estensione ti darà il nome completo dello stato. Se la descrizione non è definita, ti darà il nome del valore Enum per esempio per Alaska sarebbe AK.

In questo modo si dispone di un singolo pezzo di codice che consente di recuperare valori descrittivi per qualsiasi enumeratore non solo per gli stati. Tutto quello che devi fare è definire la descrizione dei valori Enum che devono essere più descrittivi e l'estensione farà il resto.

NOTA: L'estensione deve essere inserita nello spazio dei nomi di Sistema affinché funzioni senza la necessità di fare riferimento allo spazio dei nomi.

+0

Ecco come ho intenzione di farlo. Uso già questo metodo da mesi. –

13

Basta virare sulla risposta di Homam. Ho l'istruzione switch che restituisce gli stati con l'involucro standard.

 switch (stateCode) 
     { 
      case "AL": 
       return "Alabama"; 

      case "AK": 
       return "Alaska"; 

      case "AS": 
       return "American Samoa"; 

      case "AZ": 
       return "Arizona"; 

      case "AR": 
       return "Arkansas"; 

      case "CA": 
       return "California"; 

      case "CO": 
       return "Colorado"; 

      case "CT": 
       return "Connecticut"; 

      case "DE": 
       return "Delaware"; 

      case "DC": 
       return "District Of Columbia"; 

      case "FM": 
       return "Federated States Of Micronesia"; 

      case "FL": 
       return "Florida"; 

      case "GA": 
       return "Georgia"; 

      case "GU": 
       return "Guam"; 

      case "HI": 
       return "Hawaii"; 

      case "ID": 
       return "Idaho"; 

      case "IL": 
       return "Illinois"; 

      case "IN": 
       return "Indiana"; 

      case "IA": 
       return "Iowa"; 

      case "KS": 
       return "Kansas"; 

      case "KY": 
       return "Kentucky"; 

      case "LA": 
       return "Louisiana"; 

      case "ME": 
       return "Maine"; 

      case "MH": 
       return "Marshall Islands"; 

      case "MD": 
       return "Maryland"; 

      case "MA": 
       return "Massachusetts"; 

      case "MI": 
       return "Michigan"; 

      case "MN": 
       return "Minnesota"; 

      case "MS": 
       return "Mississippi"; 

      case "MO": 
       return "Missouri"; 

      case "MT": 
       return "Montana"; 

      case "NE": 
       return "Nebraska"; 

      case "NV": 
       return "Nevada"; 

      case "NH": 
       return "New Hampshire"; 

      case "NJ": 
       return "New Jersey"; 

      case "NM": 
       return "New Mexico"; 

      case "NY": 
       return "New York"; 

      case "NC": 
       return "North Carolina"; 

      case "ND": 
       return "North Dakota"; 

      case "MP": 
       return "Northern Mariana Islands"; 

      case "OH": 
       return "Ohio"; 

      case "OK": 
       return "Oklahoma"; 

      case "OR": 
       return "Oregon"; 

      case "PW": 
       return "Palau"; 

      case "PA": 
       return "Pennsylvania"; 

      case "PR": 
       return "Puerto Rico"; 

      case "RI": 
       return "Rhode Island"; 

      case "SC": 
       return "South Carolina"; 

      case "SD": 
       return "South Dakota"; 

      case "TN": 
       return "Tennessee"; 

      case "TX": 
       return "Texas"; 

      case "UT": 
       return "Utah"; 

      case "VT": 
       return "Vermont"; 

      case "VI": 
       return "Virgin Islands"; 

      case "VA": 
       return "Virginia"; 

      case "WA": 
       return "Washington"; 

      case "WV": 
       return "West Virginia"; 

      case "WI": 
       return "Wisconsin"; 

      case "WY": 
       return "Wyoming"; 
     } 
7

Anche in questo caso, aggiungo Homam's answer, ho solo bisogno di un traduzione del testo così ho preso le enumerazioni:

public string GetStateByName(string name) 
{ 
    switch (name.ToUpper()) 
    { 
     case "ALABAMA": 
      return "AL"; 

     case "ALASKA": 
      return "AK"; 

     case "AMERICAN SAMOA": 
      return "AS"; 

     case "ARIZONA": 
      return "AZ"; 

     case "ARKANSAS": 
      return "AR"; 

     case "CALIFORNIA": 
      return "CA"; 

     case "COLORADO": 
      return "CO"; 

     case "CONNECTICUT": 
      return "CT"; 

     case "DELAWARE": 
      return "DE"; 

     case "DISTRICT OF COLUMBIA": 
      return "DC"; 

     case "FEDERATED STATES OF MICRONESIA": 
      return "FM"; 

     case "FLORIDA": 
      return "FL"; 

     case "GEORGIA": 
      return "GA"; 

     case "GUAM": 
      return "GU"; 

     case "HAWAII": 
      return "HI"; 

     case "IDAHO": 
      return "ID"; 

     case "ILLINOIS": 
      return "IL"; 

     case "INDIANA": 
      return "IN"; 

     case "IOWA": 
      return "IA"; 

     case "KANSAS": 
      return "KS"; 

     case "KENTUCKY": 
      return "KY"; 

     case "LOUISIANA": 
      return "LA"; 

     case "MAINE": 
      return "ME"; 

     case "MARSHALL ISLANDS": 
      return "MH"; 

     case "MARYLAND": 
      return "MD"; 

     case "MASSACHUSETTS": 
      return "MA"; 

     case "MICHIGAN": 
      return "MI"; 

     case "MINNESOTA": 
      return "MN"; 

     case "MISSISSIPPI": 
      return "MS"; 

     case "MISSOURI": 
      return "MO"; 

     case "MONTANA": 
      return "MT"; 

     case "NEBRASKA": 
      return "NE"; 

     case "NEVADA": 
      return "NV"; 

     case "NEW HAMPSHIRE": 
      return "NH"; 

     case "NEW JERSEY": 
      return "NJ"; 

     case "NEW MEXICO": 
      return "NM"; 

     case "NEW YORK": 
      return "NY"; 

     case "NORTH CAROLINA": 
      return "NC"; 

     case "NORTH DAKOTA": 
      return "ND"; 

     case "NORTHERN MARIANA ISLANDS": 
      return "MP"; 

     case "OHIO": 
      return "OH"; 

     case "OKLAHOMA": 
      return "OK"; 

     case "OREGON": 
      return "OR"; 

     case "PALAU": 
      return "PW"; 

     case "PENNSYLVANIA": 
      return "PA"; 

     case "PUERTO RICO": 
      return "PR"; 

     case "RHODE ISLAND": 
      return "RI"; 

     case "SOUTH CAROLINA": 
      return "SC"; 

     case "SOUTH DAKOTA": 
      return "SD"; 

     case "TENNESSEE": 
      return "TN"; 

     case "TEXAS": 
      return "TX"; 

     case "UTAH": 
      return "UT"; 

     case "VERMONT": 
      return "VT"; 

     case "VIRGIN ISLANDS": 
      return "VI"; 

     case "VIRGINIA": 
      return "VA"; 

     case "WASHINGTON": 
      return "WA"; 

     case "WEST VIRGINIA": 
      return "WV"; 

     case "WISCONSIN": 
      return "WI"; 

     case "WYOMING": 
      return "WY"; 
    } 

    throw new Exception("Not Available"); 
} 
Problemi correlati