在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
这正是所需要的。
答案 0 :(得分:34)
:
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() + ".");
答案 1 :(得分: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()
);
}
}
}
答案 2 :(得分:2)
另外,为了维护插入顺序,您可以使用LinkedHashMap而不是HashMap。
答案 3 :(得分:2)
在python中,{2.7}可用于Python 2.7(尚未发布)和Python 3.1。它被称为OrderedDict。
答案 4 :(得分:2)
这是来自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()
);
}
}
}
答案 5 :(得分:1)
在Java中使用它的另一种方法。虽然已经发布了一种更好的方法,但这个方法在语法上更接近你的PHP代码。
for (String x:stateDict.keySet()){
System.out.printf("The abbreviation for %s is %s\n",x,stateDict.get(x));
}
答案 6 :(得分:1)
按照亚历山大的回答......
本机python字典不维护其主要用途的最大效率的排序:键到值的无序映射。
我可以想到两个解决方法:
查看OrderedDict的源代码并将其包含在您自己的程序中。
制作一个按顺序保存按键的列表:
states = ['Alabamba', 'Alaska', ...]
statesd = {'Alabamba':'AL', 'Alaska':'AK', ...}
for k in states:
print "The abbreviation for %s is %s." % (k, statesd[k])
答案 7 :(得分:0)
TreeMap不是您问题的答案,因为它按键对元素进行排序,而LinkedHashMap保留原始顺序。但是,由于排序,TreeMap更适合字典。