Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6085
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Разница между петлями
Речь идет о PHP, но я не сомневаюсь, что многие из тех же комментариев будут применяться и к другим языкам.
Проще говоря, каковы различия в различных типах цикла для PHP? Является ли один быстрее/лучше, чем другие, или я должен просто поместить его в самый читаемый цикл?
for ($i = 0; $i < 10; $i++)
{
# code...
}
foreach ($array as $index => $value)
{
# code...
}
do
{
# code...
}
while ($flag == false);
Для цикла и в то время как петли являются петлями условия входа. Они сначала оценивают условие, поэтому блок операторов, связанный с циклом, не будет выполняться даже один раз, если условие не будет выполнено
Операторы внутри этого блока цикла for будут выполняться 10 раз, значение $i будет от 0 до 9;
for ($i = 0; $i < 10; $i++)
{
# code...
}
То же самое сделано с циклом while:
$i = 0;
while ($i < 10)
{
# code...
$i++
}
Цикл Do-while - это цикл условий выхода. Он гарантированно выполняется один раз, а затем будет оценивать состояние перед повторением блока
do
{
# code...
}
while ($flag == false);
foreach используется для доступа к элементам массива от начала до конца. В начале цикла foreach внутренний указатель массива устанавливается на первый элемент массива, на следующем шаге он устанавливается на второй элемент массива и так далее до конца массива. В блоке цикла значение текущего элемента массива доступно как $value, а ключ текущего элемента доступен как $index.
foreach ($array as $index => $value)
{
# code...
}
Вы можете сделать то же самое с циклом while, как это
while (current($array))
{
$index = key($array); // to get key of the current element
$value = $array[$index]; // to get value of current element
# code ...
next($array); // advance the internal array pointer of $array
}
И наконец: руководство PHP - это ваш друг :)
@brendan:
Статья, которую вы процитировали, серьезно устарела, а информация просто ошибочна. Особенно последний пункт (использование for вместо foreach) вводит в заблуждение и обоснование, предложенное в статье, больше не относится к современным версиям .NET.
Хотя это правда, что IEnumerator использует виртуальные вызовы, на самом деле они могут быть встроены современным компилятором. Кроме того, .NET теперь знает генераторы и строго типизированные перечислители.
Существует множество тестов производительности, которые убедительно доказывают, что for обычно не быстрее, чем foreach . Вот вам пример .
С циклом foreach копия исходного массива создается в памяти для использования внутри.
Foreach-это хорошо, но есть один важный нюанс: вы не можете изменить перечисляемое, которое вы повторяете.
С циклом foreach копия исходного массива создается в памяти для использования внутри.
Foreach-это хорошо, но есть один важный нюанс: вы не можете изменить перечисляемое, которое вы повторяете.
Оба из них не будут проблемой, если вы передадите ссылку вместо значения:
foreach ($array as &$value) {
Я думаю, что это было разрешено с PHP 5.
При обращении к элементам массива, для ясности я бы использовал foreach, когда это возможно, и только если вам нужны фактические значения Индекса (например, один и тот же индекс в нескольких массивах). Это также сводит к минимуму вероятность опечатки ошибок, так как для петель сделать это все слишком легко. В общем, PHP, возможно, не стоит слишком беспокоиться о производительности. И последнее, но не менее важное, ибо и foreach имеют (или должны иметь; я не PHP-er) то же самое большое время (O(n)), поэтому вы смотрите, возможно, на небольшое количество больше использования памяти или небольшое постоянное или линейное попадание во времени.
Я использую первый цикл при итерации над обычным (индексированным?) массив и цикл foreach при работе с ассоциативным массивом. Это просто кажется естественным и помогает коду течь и быть более читаемым, на мой взгляд. Что касается do...while циклов, я использую их, когда мне нужно сделать больше, чем просто пролистать массив.
Однако я не уверен в каких-либо преимуществах производительности.
Производительность не намного лучше в любом случае. While полезен для более сложных задач, чем итерация, но for и while функционально эквивалентны.
Foreach -это хорошо,но имеет один важный нюанс: вы не можете изменить перечисляемое, которое вы повторяете. Так что никаких удалений, добавления или замены записей в / в нем нет. Изменение записей (например, изменение их свойств) - это, конечно, OK.
С циклом foreach копия исходного массива создается в памяти для использования внутри. Вы не должны использовать их на больших структурах; простой цикл for-лучший выбор. Вы можете использовать цикл while более эффективно на большой не численно индексированной структуре, такой как эта:
while(list($key, $value) = each($array)) {
Но этот подход особенно уродлив для простой небольшой структуры.
в то время как циклы лучше подходят для циклирования через потоки, или как в следующем примере, который вы видите очень часто в PHP:
while ($row = mysql_fetch_array($result)) {
Почти все время различные петли взаимозаменяемы, и это будет сводиться либо к А) эффективности, либо к Б) ясности.
Если вы знаете компромиссы эффективности различных типов петель, то да, чтобы ответить на ваш первоначальный вопрос: используйте тот, который выглядит наиболее чистым.
Что касается производительности, a foreach является более трудоемким, чем a для
http://forums.asp.net/p/1041090/1457897.aspx
Каждая петлевая конструкция служит для разных целей.
for - используется для выполнения цикла за определенное число итераций.
foreach-используется для циклического перебора всех значений в коллекции.
while-используется для выполнения цикла до тех пор, пока не будет выполнено условие.
Из трех вариантов "while", скорее всего, обеспечит наилучшую производительность в большинстве ситуаций. Конечно, если вы делаете что-то вроде следующего, вы в основном переписываете цикл "for" (который в c# немного более эффективен).
$count = 0;
do
{
...
$count++;
}
while ($count < 10);
Все они имеют различные основные цели, но они также могут быть использованы в некотором роде одинаково. Это полностью зависит от конкретной проблемы, которую вы пытаетесь решить.