Java ve PHP foreach içinde python eşdeğeri ($ key => $ değer olarak dizi)

8 Cevap java

Php, bir böyle bir ilişkisel dizi ile devlet isimleri ve kısaltmaların bir listesini işleyebilir:

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

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

(Korunmuş tuş düzeni ile) Çıkışı:

The abbreviation for ALABAMA is AL.

The abbreviation for ALASKA is AK.

The abbreviation for WYOMING is WY.

EDIT: dizi elemanlarının sırası php sürümü çıktı korunmuş olduğunu unutmayın. Java uygulaması, bir HashMap kullanılarak öğelerin sırasını garanti etmez. Ne Python sözlük yok.

Bu Java ve Python nasıl yapılır? Ben sadece python adlı gibi, anahtar verilen değer sağlamak yaklaşımlar bulmak:

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

for key in stateDict:
    value = stateDict[key]

EDIT: cevaplar dayanarak, bu, python benim çözüm oldu

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

for name, abbreviation in stateList:
    print name, abbreviation

Çıktı:

ALABAMA AL
ALASKA AK
WISCONSIN WI
WYOMING WY

Hangi gerekli tam olarak ne olduğunu.

8 Cevap

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

ilişkisel dizi kullanımı Kart java

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

Ayrıca, yerleştirme düzeni korumak için, bunun yerine bir HashMap bir LinkedHashMap kullanabilirsiniz.

Python in ordered dictionary Python 2.7 kullanılabilir (henüz yayınlanmamış) ve Python 3.1. Bu OrderedDict denir.

Java bunu yapmanın başka bir yolu. Daha iyi bir şekilde önceden gönderilmiş olmasına rağmen, bu sizin php kodu sözdizimsel yakın.

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

Bu, yerine bir HashMap bir treemap kullanmak o948 gelen modifiye kodudur. Ağacı harita tuşu ile tuşların sıralamasını koruyacak.

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

İskender'in cevabı çizgisinde ...

Yerli Python Sözlük birincil kullanımı maksimum verimlilik için sipariş tutmaz: değerlere tuşları sırasız haritalama.

Ben iki geçici çözümler düşünebilirsiniz:

  1. OrderedDict kaynak koduna bakmak ve kendi programında yer alıyor.

  2. sırayla anahtarlarını tutan bir listesini yapın:

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

LinkedHashMap orijinal düzenini korur iken, anahtar tarafından öğeleri sıralar çünkü treemap sorunuza bir cevap değildir. Ancak, treemap nedeniyle sıralama sözlük için daha uygundur.