15

phpでは、次のような連想配列を使用して、状態名とその略語のリストを処理できます。

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

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

出力(キーの順序は保持されます):

The abbreviation for ALABAMA is AL.

The abbreviation for ALASKA is AK.

The abbreviation for WYOMING is WY.

編集:配列要素の順序は、phpバージョンの出力で保持されることに注意してください。HashMapを使用するJava実装は、要素の順序を保証しません。Pythonの辞書もありません。

これはJavaとPythonでどのように行われますか?私は、Pythonのように、キーが与えられた場合に値を提供するアプローチのみを見つけます。

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

for key in stateDict:
    value = stateDict[key]

編集:答えに基づいて、これはPythonでの私の解決策でした、

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

for name, abbreviation in stateList:
    print name, abbreviation

出力:

ALABAMA AL
ALASKA AK
WISCONSIN WI
WYOMING WY

まさにそれが必要だったのです。

4

8 に答える 8

34

Pythonの場合:

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

Javaの場合:

Map<String,String> stateDict;

for (Map.Entry<String,String> e : stateDict.entrySet())
    System.out.println("The abbreviation for " + e.getKey() + " is " + e.getValue() + ".");
于 2009-08-02T19:07:31.160 に答える
6

連想配列のJavaでは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()
            );
        }
    }
}
于 2009-08-02T19:13:14.843 に答える
2

また、挿入順序を維持するために、HashMapの代わりにLinkedHashMapを使用できます。

于 2009-08-02T19:55:56.363 に答える
2

Pythonでは、順序付けられた辞書がPython 2.7(まだリリースされていません)およびPython3.1で利用できます。それはOrderedDictと呼ばれます。

于 2009-08-02T20:49:19.763 に答える
2

これは、HashMapの代わりにTreeMapを使用するo948から変更されたコードです。ツリーマップは、キーによるキーの順序を保持します。

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()
            );
      }
    }
 }
于 2009-08-02T20:50:26.653 に答える
1

Javaでそれを行う別の方法。より良い方法がすでに投稿されていますが、これは構文的にあなたのphpコードに近いものです。

for (String x:stateDict.keySet()){
        System.out.printf("The abbreviation for %s is %s\n",x,stateDict.get(x));
    }
于 2009-08-02T19:25:27.123 に答える
1

アレクサンダーの答えに沿って...

ネイティブのPythonディクショナリは、主な用途を最大限に効率化するために順序付けを維持していません。つまり、キーから値への順序付けされていないマッピングです。

私は2つの回避策を考えることができます:

  1. OrderedDictのソースコードを見て、それを独自のプログラムに含めます。

  2. キーを順番に保持するリストを作成します。

    states = ['Alabamba', 'Alaska', ...]  
    statesd = {'Alabamba':'AL', 'Alaska':'AK', ...}
    for k in states:
        print "The abbreviation for %s is %s." % (k, statesd[k])
    
于 2009-08-02T21:57:32.267 に答える
0

TreeMapは要素をキーで並べ替えますが、LinkedHashMapは元の順序を保持するため、質問に対する答えではありません。ただし、並べ替えのため、TreeMapの方が辞書に適しています。

于 2009-08-03T08:49:52.560 に答える