Java и эквивалент python для php foreach ($ array как $key => $value)
В 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.
EDIT: Обратите внимание, что порядок элементов массива сохраняется на выходе версии php. Реализация Java с использованием HashMap не гарантирует порядок элементов. Также словарь не находится в Python.
Как это делается в java и python? Я только нахожу подходы, которые поставляют значение, учитывая ключ, например, python's:
stateDict = {
"ALASKA": "AK",
"WYOMING": "WY",
}
for key in stateDict:
value = stateDict[key]
EDIT: на основе ответов это было моим решением в 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
Это именно то, что требуется.
Ответы
Ответ 1
в 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() + ".");
Ответ 2
в 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()
);
}
}
}
Ответ 3
Кроме того, чтобы поддерживать порядок вставки, вы можете использовать LinkedHashMap вместо HashMap.
Ответ 4
В python упорядоченный словарь доступен в Python 2.7 (еще не выпущен) и Python 3.1. Это называется OrderedDict.
Ответ 5
Другой способ сделать это в Java. Хотя лучший способ уже был опубликован, этот синтаксически ближе к вашему php-коду.
for (String x:stateDict.keySet()){
System.out.printf("The abbreviation for %s is %s\n",x,stateDict.get(x));
}
Ответ 6
Это модифицированный код из 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()
);
}
}
}
Ответ 7
Вдоль строк ответа Александра...
Собственный словарь python не поддерживает порядок максимальной эффективности его первичного использования: неупорядоченное сопоставление ключей со значениями.
Я могу подумать о двух обходных решениях:
-
посмотрите исходный код OrderedDict и включите его в свою собственную программу.
-
составить список, в котором хранятся ключи:
states = ['Alabamba', 'Alaska', ...]
statesd = {'Alabamba':'AL', 'Alaska':'AK', ...}
for k in states:
print "The abbreviation for %s is %s." % (k, statesd[k])
Ответ 8
TreeMap не является ответом на ваш вопрос, потому что он сортирует элементы по ключу, а LinkedHashMap сохраняет исходный порядок. Однако TreeMap более подходит для словаря из-за сортировки.