Моя компания в настоящее время использует Подрывную деятельность, CVS, Подвижный и мерзавец.
, Когда мы запустили пять лет назад, мы выбрали CVS, и мы все еще используем это в моем подразделении для нашей основной разработки и выпускаем ответвление обслуживания. Однако многое из нашего использования разработчиков, Подвижного индивидуально как способ иметь частные контрольные точки без боли ответвлений CVS (и особенно слияние их) и мы начинаем использовать Подвижный для некоторых ответвлений, которые имеют приблизительно до 5 человек. Существует хороший шанс, мы наконец угробим CVS в другом году. Наше использование Подвижных выросло органически; некоторые люди все еще даже не касаются его, потому что они довольны CVS. Все, кто попробовал Подвижный, закончили тем, что были довольны им без большой части кривой обучения.
, Чем работы действительно приятно для нас с Подвижным состоят в том, что наш (домой назрел) непрерывные серверы интеграции могут контролировать разработчика Подвижные репозитории, а также магистраль. Так, люди соглашаются на свой репозиторий, заставляют наш непрерывный сервер интеграции проверять его, и затем публиковать changeset. Мы поддерживаем много платформ, таким образом, не выполнимо сделать достойный уровень ручных проверок. Другая победа - то, что слияния часто легки, и когда они тверды, у Вас есть информация, необходимо сделать хорошее задание на слиянии. Как только кто-то заставляет объединенную версию работать, они могут продвинуть свое слияние changesets, и затем никто больше не должен повторять усилие.
самое большое препятствие состоит в том, что необходимо повторно соединить проводом разработчиков и мозги менеджеров так, чтобы они убежали от единственной линейной модели ответвления. Лучшая медицина для этого является дозой Linus Torvalds, говорящего Вам, Вы глупы и ужасны при использовании централизованного SCM. Хорошие инструменты визуализации истории помогли бы, но я еще не удовлетворен тем, что доступно.
Подвижный и CVS и работать хорошо на нас с разработчиками, использующими соединение Windows, Linux и Соляриса, и я не заметил проблем с часовыми поясами. (Действительно, это не слишком твердо; Вы просто используете секунды эпохи внутренне, и я ожидал бы, что все главные системы SCM разбираются в этом).
было возможно, с изрядным количеством усилия, импортировать нашу историю CVS магистрали в Подвижный. Было бы легче, если бы люди сознательно не ввели угловые случаи в нашу историю CVS магистрали как способ протестировать инструменты миграции истории. Это включенное слияние некоторых Подвижных ответвлений в историю CVS, таким образом, проект похож на него, использовало со дня один.
Наша кремниевая проектная группа выбрала Subversion. Они - главным образом восемь часовых поясов далеко от моего офиса, и даже по довольно хорошей выделенной линии между нашей офисной Подрывной деятельностью контроль является болезненным, но осуществимым. Большое преимущество централизованных систем состоит в том, что можно потенциально проверить большие двоичные файлы в нем (например, выпуски поставщика), не делая все распределенные репозитории огромными.
Мы используем мерзавца для работы с ядром Linux. Мерзавец более подошел бы для нас, как только собственная версия Windows зрела, но я думаю, что Подвижный дизайн так прост и изящен, что мы будем придерживаться его.
в 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() + ".");
Это модифицированный код из 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()
);
}
}
}
В соответствии со строками ответа Александра ...
Собственный словарь Python не поддерживает порядок для максимальной эффективности его основного использования: неупорядоченное отображение ключей в значения.
Я могу придумать два обходных пути:
посмотрите исходный код OrderedDict и включите его в свою программу.
составьте список, содержащий ключи в указанном порядке:
States = ['Alabamba', 'Alaska ', ...]
Statesd = {'Алабамба': 'AL', 'Аляска': 'AK', ...}
для k в состояниях:
print "Сокращение для% s -% s." % (k, состоянияd [k])
TreeMap не является ответом на ваш вопрос, потому что он сортирует элементы по ключу, а LinkedHashMap сохраняет исходный порядок. Однако TreeMap больше подходит для словаря из-за сортировки.
В Python упорядоченный словарь доступен в Python 2.7 (еще не выпущен) и Python 3.1. Он называется OrderedDict.
в 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()
);
}
}
}
Кроме того, для поддержания порядка вставки вы можете использовать LinkedHashMap вместо HashMap.
Другой способ сделать это на Java. Хотя лучший способ уже был опубликован, этот синтаксически ближе к вашему php-коду.
for (String x:stateDict.keySet()){
System.out.printf("The abbreviation for %s is %s\n",x,stateDict.get(x));
}