Я изучаю Python. Недавно я узнал о Ниме и тоже начал его изучать. Мне понравился синтаксис Python+Pascal и скорость C. К сожалению, по Nim гораздо меньше образовательной информации и справочников, чем по Python. Я не совсем понимаю, как правильно выполнить обратную итерацию в Ниме.
В Python это легко. Например, для цикла for метод var[::-1] работает легко. И похоже, что в Ниме это просто так не работает. Что-то вроде var[^1..0] просто выдаст мне ошибку. Мне удалось выполнить обратную итерацию, используя len() и переменную «ind», которая просто уменьшается с каждым циклом.
Вот пример кода.
const str: string = "Hello world!"
var str_2: string
var ind: int = len(str)
for i in str:
ind.inc(-1)
str_2.add(str[ind])
echo str_2
Это работает. Но это не питоническое решение. Ненужный велосипед. По-хорошему, должны быть встроенные инструменты для обратной итерации. Знатоки Ним, каковы основные методы обратной итерации?
Извините за мой английский. Пишу с помощью онлайн-переводчика.
Я попробовал использовать обратную итерацию, например var[^1..0]. Просто выдает ошибку. Еще я пробовал использовать функцию «обратный отсчет», но она нужна не для этого. Хотелось бы узнать об основных и правильных методах обратной итерации в Nim.
Еще я пробовал использовать функцию «обратный отсчет», но она нужна не для этого.
Я не знаю, что не так с обратным отсчетом. Например, вы можете использовать его для перебора от a.len - 1
до 0
(очень похоже на for r := length(a) - 1 downto 0 do
в Паскале) и add
символов в этих позициях, то есть в обратном порядке, до новой строки:
const a: string = "Hello world!"
var b: string
for r in countdown(a.len - 1, 0): b.add a[r]
echo b
Но чтобы просто перевернуть строку, вы также можете использовать openArray и перевернуть из std/algorithm
, а затем cast
обратно в строку:
import std/algorithm
const a: string = "Hello world!"
echo cast[string](a.reversed)
Или, как отметил @xbello в этого комментария , используйте ту же процедуру из std/unicode
, которая напрямую (принимает и) возвращает строковые типы, устраняя необходимость cast
вручную.
import std/unicode
const a: string = "Hello world!"
echo a.reversed
Все вышеперечисленное производит:
!dlrow olleH
Также в std/unicode
вас ждет процедура proc reversed(s: string): string
. Это всего лишь синтаксический сахар по сравнению со вторым решением @pmf.
Ооо, это можно сделать с помощью countown(). Значит я где-то запутался в прошлом. Теперь это гораздо яснее. Большое спасибо за отличный совет. Теперь я обязательно воспользуюсь этими методами. 👍