Что делает установка внутреннего итератора на внешний итератор [j = i] во вложенных циклах for?

#math #while-loop #nested-loops

#математика #цикл while #вложенные циклы

Вопрос:

Я работаю над проблемой coderbyte, и, посмотрев на решения конкретной проблемы, я вижу, что многие люди используют вложенные циклы for, у которых итератор внутреннего цикла установлен = итератору внешних циклов. Создание такого типа шаблона:

       i values         j values
when... i=0    |  j=0,j=1,j=2,j=3 etc.
        i=1    |  j=1, j=2, j=3, j=4 etc.
        i=2    |  j=2, j=3, j=4, j=5 etc.

  

Это общая концепция. Какой тип шаблона это делает и почему это полезно?

Код для этого будет

 for(let i = 0; i < array.length; i  ) {
    for(let j = i; j < array.length; j  ) {
        //do something
    }
}
  

Какая от этого польза? Я не могу понять, как это можно применить к чему-либо.

Комментарии:

1. Это цикл по всем парам индексов i, j с. 0 <= i <= j < array.length

2. Во внутреннем цикле вы имели в виду j вместо pof i , не так ли?

3. Да, я действительно имел в виду j . Спасибо

Ответ №1:

Показанный «шаблон» кодов представляет собой треугольник. Выведите любой символ во внутреннем цикле и новую строку во внешнем цикле, чтобы понять, что я имею в виду.

Особенно при упоминании «массива», такой шаблон можно использовать для «сделать что-то со всеми парами каждой записи и любой ДРУГОЙ записи» (где «1 и 2» будут считаться той же парой, что и «2 и 1», т. Е. Порядок не имеет значения).
Для этого не было бы необходимости делать «что-то» с «каждой» записью (выбранной внешним циклом) и «другой» записью (выбранной внутренним циклом), если «другая» запись уже была выбрана как «каждая» запись внешним циклом в любомпредыдущая комбинация «друг с другом».
В этом случае вы можете выбрать «каждую запись» с помощью внешнего цикла, проходящего от начала до конца через массив, очевидно. Но вам нужно только выбрать «другую» запись из тех, которые внешний цикл ЕЩЕ не выбрал.

Итак, во внутреннем цикле вы выбираете запись, запуская цикл с индексом внешнего цикла.

На самом деле я ожидал бы запустить внутренний цикл на входе ПОСЛЕ индекса внешних циклов, но я предполагаю, что ваш пример кода не настолько точен.
Строго говоря, начиная с самого индекса внешних циклов, было бы «сделать что-то со всеми парами любой записи и любой другой записи или той же записи«. Т.е. Это дополнительно включало бы «1 и 1» и «2 и 2», но все же только «1 и 2», а не «2 и 1 «.