Функция подстроки - это то, что вы ищете. Он встречается (вероятно) в каждом языке программирования.
Вот рабочий пример: https://www.w3schools.com/jsref/jsref_substring.asp
Также важно, если вы используете отрицательное число для параметров, оно будет подстрокой от «конца» строки вместо передней, или она будет считать назад, а не вперед.
У вас есть счетчик в вашем цикле, поэтому вы легко сможете сыграть и заставить его работать с этой функцией.
, например, когда использовать его по foreach?
Вы не используете IEnumerable
"более чем" foreach
. Реализация IEnumerable
делает использование foreach
возможным .
, Когда Вы пишете код как:
foreach (Foo bar in baz)
{
...
}
это функционально эквивалентно записи:
IEnumerator bat = baz.GetEnumerator();
while (bat.MoveNext())
{
bar = (Foo)bat.Current
...
}
"функционально эквивалентным", я подразумеваю, что это на самом деле, во что компилятор поворачивает код. Вы не можете использовать foreach
на [1 110] в этом примере если baz
реализации IEnumerable
.
IEnumerable
средства, что baz
реализации метод
IEnumerator GetEnumerator()
Эти IEnumerator
объект, что этот метод возвраты должен реализовать методы
bool MoveNext()
и
Object Current()
первые усовершенствования метода к следующему объекту в эти IEnumerable
объект, который создал перечислитель, возвратившись false
, если это сделано, и вторые возвраты текущий объект.
Что-либо в .NET, которого можно выполнить итерации по реализациям IEnumerable
. Если Вы создаете свой собственный класс, и он уже не наследовался классу, который реализует IEnumerable
, можно сделать класс применимым в [1 120] операторы путем реализации IEnumerable
(и путем создания класса перечислителя, который его новое GetEnumerator
метод возвратит).
Реализация IEnumerable
по существу средства, что объект может быть выполнен с помощью итераций. Это не обязательно означает, что это - массив, поскольку существуют определенные списки, которые не могут быть индексированы, но можно перечислить их.
IEnumerator
фактический объект, используемый для выполнения повторений. Это управляет перемещением от одного объекта до следующего в списке.
Большую часть времени, IEnumerable
& IEnumerator
используются прозрачно в качестве части foreach
цикл.
Думают о счетных объектах со списков, стеков, деревьев.
Реализация IEnumerable позволяет Вам получить IEnumerator для списка.
IEnumerator позволяет последовательный доступ стиля foreach к объектам в списке, с помощью ключевого слова урожая.
Прежде foreach реализация (в Java 1.4, например), способ выполнить итерации списка состоял в том, чтобы получить перечислитель из списка, затем попросить у этого "следующего" объекта в списке, столько, сколько значение, возвращенное как следующий объект, не является нулевым. Foreach просто делает это неявно как функцию языка, таким же образом та блокировка () реализует класс Монитора негласно.
я ожидаю работы foreach над списками, потому что они реализуют IEnumerable.
IEnumerable реализует GetEnumerator. При вызове тот метод возвратится IEnumerator, который реализует MoveNext, Сброс и Текущий.
Таким образом, когда Ваш класс реализует IEnumerable, Вы говорите, что можно назвать метод (GetEnumerator) и получить новый возвращенный объект (IEnumerator), можно использовать в цикле, таком как foreach.
Реализация IEnumerable означает Ваш класс, возвращает объект IEnumerator:
public class People : IEnumerable
{
IEnumerator IEnumerable.GetEnumerator()
{
// return a PeopleEnumerator
}
}
Реализация IEnumerator означает, что Ваш класс возвращает методы и свойства для повторения:
public class PeopleEnumerator : IEnumerator
{
public void Reset()...
public bool MoveNext()...
public object Current...
}
Вот в чем разница так или иначе.