Каковы основные способы выполнения обратной итерации в Nim?

Я изучаю 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.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Еще я пробовал использовать функцию «обратный отсчет», но она нужна не для этого.

Я не знаю, что не так с обратным отсчетом. Например, вы можете использовать его для перебора от 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

Ооо, это можно сделать с помощью countown(). Значит я где-то запутался в прошлом. Теперь это гораздо яснее. Большое спасибо за отличный совет. Теперь я обязательно воспользуюсь этими методами. 👍

Lucius_Will 13.03.2024 00:49

Также в std/unicode вас ждет процедура proc reversed(s: string): string. Это всего лишь синтаксический сахар по сравнению со вторым решением @pmf.

xbello 13.03.2024 09:36

Другие вопросы по теме

Использование R или tidyverse для настройки пропорции в моем фрейме данных в соответствии с известным параметром (используя prop.table или table или что-нибудь еще)
Суммировать значения свойств, когда идентификатор совпадает, и возвращать результат с помощью JavaScript
Перебирайте евклидовы расстояния, соответствующие идентификатору, используя dist() в R
Разделение слова в верхнем регистре без использования регулярного выражения или функции приводит к ошибке: невозможно присвоить выражение или недостаточно значения для распаковки
Как напрямую назначить std::vector другому std::vector, если элементы имеют один и тот же тип, но разную константность?
Как я могу пройти через вложенный объект и преобразовать его?
Почему «всего» не существует в текущем контексте?
PYTHON: перебирать список объектов по атрибуту
Как перебрать список пар, которые соответствуют пробелам в списке
Как я могу использовать «цикл for» для химической итерации?