سؤال

في 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.لا يضمن تنفيذ Java باستخدام HashMap ترتيب العناصر.ولا القاموس في بايثون.

كيف يتم ذلك في جافا وبيثون؟أجد فقط الأساليب التي توفر القيمة، بالنظر إلى المفتاح، مثل python:

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

for key in stateDict:
    value = stateDict[key]

يحرر:بناءً على الإجابات، كان هذا هو الحل الذي أطرحه في لغة بايثون،

# 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

وهو بالضبط ما كان مطلوبا.

هل كانت مفيدة؟

المحلول

وفي بيثون:

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

وفي جاوة:

Map<String,String> stateDict;

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

نصائح أخرى

وفي جافا لمجموعة النقابي استخدام خريطة

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

وأيضا، للحفاظ على النظام الإدراج، يمكنك استخدام LinkedHashMap بدلا من HashMap.

في الثعبان هو أمر القاموس متاح في بيثون 2.7 (لا يصدر بعد) وبيثون 3.1. انه دعا OrderedDict.

وهذا هو رمز المعدلة من o948 حيث يمكنك استخدام TreeMap بدلا من HashMap. سوف الخريطة شجرة الحفاظ على ترتيب مفاتيح بواسطة مفتاح.

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

وهناك طريقة أخرى للقيام بذلك في جاوة. على الرغم من أن قد تم نشرها بطريقة أفضل، وهذا واحد من أقرب نحويا إلى رمز PHP الخاص بك.

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

على غرار إجابة ألكسندر ...

لا يحافظ قاموس python الأصلي على الترتيب لتحقيق أقصى قدر من الكفاءة لاستخدامه الأساسي:تعيين غير منظم لمفاتيح القيم.

يمكنني التفكير في حلين:

  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])
    

وTreeMap ليس جوابا على سؤالك لأنه يفرز العناصر بواسطة مفتاح، في حين LinkedHashMap يحافظ على النظام الأصلي. ومع ذلك، TreeMap هو أكثر ملاءمة للقاموس بسبب الفرز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top