21 Stimmen

Abkürzungen von Staaten aus Staatsnamen machen

Gibt es eine integrierte .NET-Funktionalität für die Erstellung von Staatskürzeln aus Staatsnamen?

Ich weiß, dass die Funktion nicht schwer zu schreiben ist, aber ich gehe davon aus, dass MS einen effizienteren Weg gefunden hat als den folgenden x50:

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

Andere Ideen, wie man dies effizienter gestalten könnte, sind ebenfalls willkommen.

6voto

Andrew Punkte 1550

Hier ist eine getestete C#-Funktion, die die Abkürzung des US-Bundesstaates annimmt und den vollständigen Namen des Staates zurückgibt. Sie verwendet eine Wörterbuchmethode, die kompakter ist als ein Schalter. Um Ihre Frage zu beantworten, können Sie einfach die Schlüssel und Werte austauschen.

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

public string stateAbbreviationExpand(string abbr)
{
    Dictionary<string, string> states = new Dictionary<string, string>();

    states.Add("AL", "Alabama");
    states.Add("AK", "Alaska");
    states.Add("AZ", "Arizona");
    states.Add("AR", "Arkansas");
    states.Add("CA", "California");
    states.Add("CO", "Colorado");
    states.Add("CT", "Connecticut");
    states.Add("DE", "Delaware");
    states.Add("DC", "District of Columbia");
    states.Add("FL", "Florida");
    states.Add("GA", "Georgia");
    states.Add("HI", "Hawaii");
    states.Add("ID", "Idaho");
    states.Add("IL", "Illinois");
    states.Add("IN", "Indiana");
    states.Add("IA", "Iowa");
    states.Add("KS", "Kansas");
    states.Add("KY", "Kentucky");
    states.Add("LA", "Louisiana");
    states.Add("ME", "Maine");
    states.Add("MD", "Maryland");
    states.Add("MA", "Massachusetts");
    states.Add("MI", "Michigan");
    states.Add("MN", "Minnesota");
    states.Add("MS", "Mississippi");
    states.Add("MO", "Missouri");
    states.Add("MT", "Montana");
    states.Add("NE", "Nebraska");
    states.Add("NV", "Nevada");
    states.Add("NH", "New Hampshire");
    states.Add("NJ", "New Jersey");
    states.Add("NM", "New Mexico");
    states.Add("NY", "New York");
    states.Add("NC", "North Carolina");
    states.Add("ND", "North Dakota");
    states.Add("OH", "Ohio");
    states.Add("OK", "Oklahoma");
    states.Add("OR", "Oregon");
    states.Add("PA", "Pennsylvania");
    states.Add("RI", "Rhode Island");
    states.Add("SC", "South Carolina");
    states.Add("SD", "South Dakota");
    states.Add("TN", "Tennessee");
    states.Add("TX", "Texas");
    states.Add("UT", "Utah");
    states.Add("VT", "Vermont");
    states.Add("VA", "Virginia");
    states.Add("WA", "Washington");
    states.Add("WV", "West Virginia");
    states.Add("WI", "Wisconsin");
    states.Add("WY", "Wyoming");
    if (states.ContainsKey(abbr))
        return (states[abbr]);
    /* error handler is to return an empty string rather than throwing an exception */
    return "";      
}

2voto

kemiller2002 Punkte 110605
if statename.tolower == "new york" then 
  statename = "NY"
else if

Wenn Sie sich also für diesen Weg entscheiden, würde ich das tun:

  1. verwenden eine Schalter Anweisung anstelle von if else switch(state.ToLower()) . Dies ist effizienter als if then-Anweisungen. Der Compiler wird die switch-Anweisung optimieren.

  2. Wenn Sie unbedingt eine if then-Anweisung verwenden müssen. Machen Sie

    string lowerCaseState = state.ToLower().
    if(lowerCaseState == "new york"){....}else if...

Auf diese Weise erstellen Sie eine Zeichenkette in Kleinbuchstaben nur einmal (Zeichenketten sind unveränderlich) und nicht in jedem Teil der if then-Anweisung.

In Wahrheit würde ich wahrscheinlich eine switch-Anweisung mit einer statischen Methode verwenden.

  1. Die Namen der Staaten werden sich nicht ändern
  2. Die staatlichen Abkürzungen werden sich nicht ändern.

Sie könnten ein Objekt zum Speichern der Werte erstellen, um sie bei jedem Programmlauf zu laden, aber warum? Sie könnten den Compiler auch den Zugriff auf nicht veränderliche statische Werte optimieren lassen.

2voto

localman Punkte 497

Dies ist technisch off topic, aber ich bin Kommissionierung, wenn jemand nach Provinz 2-Buchstaben-Codes, dann Land ist der nächste. hier ist, wie Sie es tun, um die 2-Buchstaben-Länder-Codes zu erhalten, mit zuerst den Namen des Landes:

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

1voto

Jesse C. Slicer Punkte 19426

Eine Datenbank, in der das Feld mit dem Namen des Bundeslandes indiziert ist (mit einem Cluster-Index, wenn das das Feld ist, nach dem Sie am häufigsten suchen), damit die Suche effizient ist, und eine Abfrage, die die Abkürzung des Bundeslandes zurückgibt:

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

Dies hat den Vorteil, dass es in vielen Anwendungen und Umgebungen wiederverwendet werden kann.

0voto

Joe Punkte 1

Wenn Sie eine .ini-Datei verwenden, können Sie die Abkürzung mit einer Zeile erhalten Die folgende Zeile liefert FL für MyAbrev

MyAbrev = sGetINI(App.Path & "\" & "SSApp.ini", "States", "Florida","No State")

Sie müssen den API-Aufruf für sGetINI und die folgende Auflistung für alle 50 Staaten in Ihrer .ini-Datei haben

[States]
Alabama=AL
Alaska=AK
Arizona=AZ
Arkansas=AR
.
.
.
Washington=WA
West Virginia=WV
Wisconsin=WI
Wyoming=WY

Wenn Sie das Gegenteil erreichen wollen, d. h. Staaten für Abkürzungen, fügen Sie der Liste Folgendes hinzu.

AL=Alabama
AK=Alaska
AZ=Arizona
AR=Arkansas
.
.
.
WA=Washington
WV=West Virginia
WI=Wisconsin
WY=Wyoming

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X