2010-10-13 16 views
13

Czy jest wbudowana funkcja .NET do tworzenia skrótów stanu poza nazwami stanów?Tworzenie skrótów stanu od nazw stanu

wiem, że funkcja nie byłoby trudne do napisania, ale zakładam, że MS nie pomyślał o bardziej efektywny sposób niż w następnym X50:

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

wszelkie inne myśli co to są bardziej wydajne również docenione.

+3

@DMan byłem po prostu ciekawy, jeśli nie została wcześniej istniejących funkcjonalności tam. Nie ma potrzeby, żeby wymyślać koło. – Jim

+0

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

Odpowiedz

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

więc jeśli masz zamiar pójść tą drogą chciałbym:

  1. użyć switch oświadczenie zamiast jeśli inny switch(state.ToLower()). Będzie to bardziej wydajne niż wtedy, gdy wystąpią wyciągi. Kompilator zoptymalizuje instrukcję przełącznika.

  2. Jeśli koniecznie musi używać if następnie stwierdzenie. Wykonaj

    ciąg lowerCaseState = state.ToLower().
    if (lowerCaseState == "New York") {....} else if ...

ten sposób tworzysz małą ciąg raz (łańcuchy są niezmienne) zamiast każdej części instrukcja if if.

Prawdę mówiąc, prawdopodobnie użyłbym instrukcji switch ze statyczną metodą.

  1. nazwy państwa nie zamierzamy zmieniać
  2. skróty państwowe nie będą się zmieniać.

Można utworzyć obiekt do przechowywania wartości, aby załadować je przy każdym uruchomieniu programu, ale dlaczego? Równie dobrze można pozwolić, aby kompilator optymalizował dostęp dla niezmiennych wartości statycznych.

11

należy użyć Dictionary<String, String> z StringComparer.OrdinalIgnoreCase.

+0

Nigdy nie używałem słownika, czy możesz wyjaśnić dalej? – Jim

+0

var d = new Dictionary { –

1

Baza danych z pola nazwy stan indeksowanego (skupione indeks jeśli to pole masz zamiar szukać na najczęściej), dzięki czemu wyszukiwanie będzie skuteczne i zapytanie powrocie skrót STAN:

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

Ma to zaletę wielokrotnego użytku w wielu aplikacjach i środowiskach.

72

Mam nadzieję, że to pomoże

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 za wysiłek. – Jim

+6

+1 za zaoszczędzenie mi trochę czasu. – thiag0

+4

Jesteś cudowną, cudowną osobą, – attack

3

Oto badany C# funkcja, która zajmuje skrót Stanu USA i zwraca pełną nazwę państwa. Używa metody słownikowej, która jest bardziej zwarta niż przełącznik. Aby odpowiedzieć na twoje pytanie, możesz po prostu wymienić klucze i wartości.

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

+0

Oto ten, który używa Słownika localman

+1

Yikes! Ta metoda odbudowuje słownik dla * każdego wyszukiwania *. W ogóle mało wydajny. Słownik powinien być zbudowany raz (lub jeśli jest to potrzebne, jeśli pojawi się więcej stanów), a następnie zapytany wiele razy później. –

0

Jest to technicznie off topic, ale jestem zbieranie jeśli ktoś jest po kodach prowincja 2 liter, a następnie kraj jest obok.oto jak to zrobić, aby uzyskać kodom 2 litera, po uprzednim nazwę kraju:

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

nic złego z oferowanych rozwiązań tutaj, ale chciałbym zaproponować inną opcję, która, moim zdaniem, jest trochę lepiej . Można zdefiniować następujące Enum metodę rozszerzenia, które wykorzystuje odbicia i opis atrybutu, aby uzyskać pełną nazwę państwa:

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(); 
     } 
    } 
} 

Zasadniczo będzie można wykonać następujące czynności:

var stateName = State.AL.GetDescription(); 

Teraz wszystko, czego potrzebujesz jest ozdobić swoje wartości wyliczający z atrybutu Opis:

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

A metoda rozszerzenie daje pełną nazwę państwa. Jeśli opis nie jest zdefiniowany, da ci nazwę wartości Enum, na przykład dla Alaski będzie to AK.

W ten sposób masz pojedynczy kod, który pozwala pobrać wartości opisowe dla każdego modułu wyliczającego, nie tylko dla stanów. Wszystko, co musisz zrobić, to zdefiniować opis wartości wyliczeniowych, które muszą być bardziej opisowe, a rozszerzenie wykona resztę.

UWAGA: Rozszerzenie musi być umieszczone w przestrzeni nazw System, aby mogło działać po wyjęciu z pudełka bez konieczności odwoływania się do jego przestrzeni nazw.

+0

Tak właśnie planuję. Używam tej metody już od miesięcy. –

13

Skorzystanie z odpowiedzi Homam. Mam instrukcję switch zwracającą stany ze standardową obudową.

 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

Znowu dodanie na Homam's answer, ja po prostu potrzebne tłumaczenie tekstu, więc wyjął teksty stałe:

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"); 
}