Domanda

In php, si può gestire un elenco di nomi di stato e le loro abbreviazioni con un array associativo come questo:

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

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

Output (con l'ordine delle chiavi conservato):

The abbreviation for ALABAMA is AL.

The abbreviation for ALASKA is AK.

The abbreviation for WYOMING is WY.

EDIT: si noti che l'ordine degli elementi dell'array viene conservato nell'output della versione php. L'implementazione Java, usando una HashMap, non garantisce l'ordine degli elementi. Né il dizionario in Python.

Come si fa in java e python? Trovo solo approcci che forniscono il valore, data la chiave, come quelli di Python:

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

for key in stateDict:
    value = stateDict[key]

EDIT: basato sulle risposte, questa era la mia soluzione in Python,

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

for name, abbreviation in stateList:
    print name, abbreviation

Output:

ALABAMA AL
ALASKA AK
WISCONSIN WI
WYOMING WY

Che è esattamente ciò che era richiesto.

È stato utile?

Soluzione

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() + ".");

Altri suggerimenti

in java per l'utilizzo dell'array associativo Map

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

Inoltre, per mantenere l'ordine di inserimento, è possibile utilizzare una LinkedHashMap anziché una HashMap.

In Python un dizionario ordinato è disponibile in Python 2.7 (non ancora rilasciato) e Python 3.1. Si chiama OrderedDict.

Questo è il codice modificato da o948 in cui si utilizza una TreeMap anziché una HashMap. La mappa ad albero manterrà l'ordinamento delle chiavi per chiave.

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

Un altro modo di farlo in Java. Sebbene sia già stato pubblicato un modo migliore, questo è sintatticamente più vicino al tuo codice php.

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

Sulla falsariga della risposta di Alexander ...

Il dizionario nativo di Python non mantiene l'ordinamento per la massima efficienza del suo uso principale: una mappatura non ordinata delle chiavi ai valori.

Mi vengono in mente due soluzioni alternative:

  1. guarda il codice sorgente di OrderedDict e includilo nel tuo programma.

  2. crea un elenco che contiene le chiavi in ??ordine:

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

TreeMap non è una risposta alla tua domanda perché ordina gli elementi in base alla chiave, mentre LinkedHashMap conserva l'ordine originale. Tuttavia, TreeMap è più adatto al dizionario a causa dell'ordinamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top