Frage

In PHP kann man eine Liste von Zustandsnamen handhaben und ihre Abkürzungen mit einem assoziativen Array wie folgt:

<?php
    $stateArray = array(
        "ALABAMA"=>"AL",
        "ALASKA"=>"AK",
        // etc...
        "WYOMING"=>"WY"
    );

    foreach ($stateArray as $stateName => $stateAbbreviation){
        print "The abbreviation for $stateName is $stateAbbreviation.\n\n";
    }
?>

Ausgabe (mit Schlüssel, um erhalten):

The abbreviation for ALABAMA is AL.

The abbreviation for ALASKA is AK.

The abbreviation for WYOMING is WY.

EDIT: Beachten Sie, dass die Reihenfolge der Array-Elemente wird in der Ausgabe der PHP-Version erhalten. Die Java-Implementierung, mit einer HashMap, garantiert nicht die Reihenfolge der Elemente. Auch nicht das Wörterbuch in Python.

Wie ist das in Java und Python getan? Ich habe nur Ansätze finden, die den Wert, da der Schlüssel, wie Pythons liefern:

stateDict = {
    "ALASKA": "AK",
    "WYOMING": "WY",
}

for key in stateDict:
    value = stateDict[key]

EDIT: auf der Grundlage der Antworten, das war meine Lösung in Python,

# a list of two-tuples
stateList = [
    ('ALABAMA', 'AL'),
    ('ALASKA', 'AK'),
    ('WISCONSIN', 'WI'),
    ('WYOMING', 'WY'),
]

for name, abbreviation in stateList:
    print name, abbreviation

Ausgabe:

ALABAMA AL
ALASKA AK
WISCONSIN WI
WYOMING WY

Das ist genau das, was erforderlich war.

War es hilfreich?

Lösung

in Python:

for key, value in stateDict.items(): # .iteritems() in Python 2.x
    print "The abbreviation for %s is %s." % (key, value)

in Java:

Map<String,String> stateDict;

for (Map.Entry<String,String> e : stateDict.entrySet())
    System.out.println("The abbreviation for " + e.getKey() + " is " + e.getValue() + ".");

Andere Tipps

in Java für assoziatives Array verwenden Karte

import java.util.*;

class Foo
{
    public static void main(String[] args)
    {
        Map<String, String> stateMap = new HashMap<String, String>();
        stateMap.put("ALABAMA", "AL");
        stateMap.put("ALASKA", "AK");
        // ...
        stateMap.put("WYOMING", "WY");

        for (Map.Entry<String, String> state : stateMap.entrySet()) {
             System.out.printf(
                "The abbreviation for %s is %s%n",
                state.getKey(),
                state.getValue()
            );
        }
    }
}

Auch Auftrag zu erhalten, können Sie eine LinkedHashMap anstelle eines HashMap.

In Python ein bestellt Wörterbuch ist 2.7 in Python verfügbar (nicht noch nicht freigegeben) und Python 3.1. Es heißt OrderedDict.

Dies ist der modifizierte Code o948, wo man statt einer HashMap einen TreeMap verwenden. Der Baum Karte wird die Reihenfolge des Schlüssels durch den Schlüssel erhalten.

import java.util.*;

class Foo
{
 public static void main(String[] args)
 {
    Map<String, String> stateMap = new TreeMap<String, String>();
    stateMap.put("ALABAMA", "AL");
    stateMap.put("ALASKA", "AK");
    // ...
    stateMap.put("WYOMING", "WY");

    for (Map.Entry<String, String> state : stateMap.entrySet()) {
             System.out.printf(
                    "The abbreviation for %s is %s%n",
                    state.getKey(),
                    state.getValue()
            );
      }
    }
 }

Eine andere Möglichkeit, es in Java zu tun. Obwohl eine bessere Art und Weise ist bereits gebucht, dieses irgendjemandes syntaktisch näher an den PHP-Code.

for (String x:stateDict.keySet()){
        System.out.printf("The abbreviation for %s is %s\n",x,stateDict.get(x));
    }

Nach dem Vorbild von Alexander Antwort ...

Der native Python-Wörterbuch hält nicht für eine maximale Effizienz der primären Verwendung der Einrichtung: eine ungeordnete Zuordnung von Tasten auf Werte

.

kann ich denke an zwei Lösungen:

  1. Blick auf den Quellcode OrderedDict und es in Ihrem eigenen Programm enthalten.

  2. machen Sie eine Liste, die die Schlüssel, um hält:

    states = ['Alabamba', 'Alaska', ...]  
    statesd = {'Alabamba':'AL', 'Alaska':'AK', ...}
    for k in states:
        print "The abbreviation for %s is %s." % (k, statesd[k])
    

TreeMap ist keine Antwort auf Ihre Frage, weil es Elemente von Schlüssel sortiert, während LinkedHashMap ursprüngliche Ordnung beibehalten. Allerdings TreeMap ist besser geeignet für das Wörterbuch wegen des Sortierens.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top