Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lua

Войти
Регистрация
Восстановить пароль
 
Slenon
3 / 3 / 0
Регистрация: 25.07.2016
Сообщений: 112
#1

Как превратить строку в список - Lua

20.11.2016, 17:36. Просмотров 800. Ответов 9
Метки нет (Все метки)

То есть нужен код превращающий a = "Hello" в b = {"H", "e", "l", "l", "o"}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2016, 17:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как превратить строку в список (Lua):

Как превратить строку в набор переменных? - PHP
Здравствуйте! У меня такой вопрос. Есть форма которая посылает с сайта на другой сервер в input valuue нескололько значений переменных Их...

Как превратить строку в двухмерный массив byte? - C#
Имеется длинная строка. Необходимо преобразовать её в несколько массивов 4 х 4

Превратить список с парной количеством элементов в ассоциативной список - Lisp
И снова списки: Дан список (a b c d ...) с парной количеством элементов. Превратить его в ассоциативной список. В качестве ключей взять...

Линейные списки: Представить каждую строку как список слов, а весь текст-как список строк - Turbo Pascal
В текстовом файле находятся строки текста,разбитого на отдельные слова.Слова отделяются знаками припинания или пробелами.Представить каждую...

Превратить список по схеме - Haskell
превратить список по схеме

Превратить список за схемой - Haskell
Превратить список за схемой: -->

9
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
20.11.2016, 20:33 #2
воспользуйтесь циклом
0
vantfiles
24 / 24 / 11
Регистрация: 07.05.2013
Сообщений: 92
31.12.2016, 02:33 #3
Код
function str2arr( s )

    local res = {}

    for i = 1, #s do
    
        res[ i ] = s:sub( i,i )

    end

    return res
end
0
Slenon
3 / 3 / 0
Регистрация: 25.07.2016
Сообщений: 112
31.12.2016, 08:02  [ТС] #4
R = "строка"
Код
local W = {}
local j = 1
for i in string.gmatch(R, ".") do W[j] = i; j=j+1 end
0
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
31.12.2016, 12:18 #5
на мой взгляд, лучший вариант это
Код
function str2arr(str)
  local arr={}
  for ch in str:gmatch'.' do
    table.insert(arr,ch)
  end
  return arr
end
0
vantfiles
24 / 24 / 11
Регистрация: 07.05.2013
Сообщений: 92
02.01.2017, 02:57 #6
> на мой взгляд, лучший вариант это

То. что регекспы по скорости проиграют, мне было понятно и без тестов, но мне стало интересно, на сколько.
Я прогнал все три варианта по 10 млн раз и вот что получил на своей машине в среднем:

vantfiles -- 29,6 сек
Slenon -- 52 сек
ProgJ -- 63,6
1
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
02.01.2017, 14:21 #7
vantfiles, когда нужна скорость пишут C-функции

Добавлено через 3 минуты
и ваш вариант можно заметно ускорить, если пользоваться не s:sub, а завести локальную sub
Код
local sub=string.sub
0
vantfiles
24 / 24 / 11
Регистрация: 07.05.2013
Сообщений: 92
02.01.2017, 18:57 #8
не все пользователи луа имеют возможность писать си-функции, правда?
если нужна скорость, пишут не на си, а на ассемблере

локальные подстановки можно проделать и в Ваших вариантах, разумеется, если хотите, я переделаю тесты с учетом этой луа-шной фичи

Пожалуйста, не обижайтесь, мы ведь здесь обмениваемся опытом, а не выясняем кто круче, правда?
0
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
03.01.2017, 00:25 #9
Цитата Сообщение от vantfiles Посмотреть сообщение
если нужна скорость, пишут не на си, а на ассемблере
и Си, и ассемблер компилируется в одинаковые инструкции и выполняется с одинаковой скоростью
и в них нет различия между строкой и массивом символов
Но это тут не при чём
В терминах Lua, C-функцией называют функцию, написанную не на самом Lua, а встроенную в него изнутри. Такие функции пишутся не обязательно на C, а на чём угодно: от машинных кодов до VBA
Если Lua не хватает скорости, то используют их
Lua правильнее использовать не там где нужна скорость, а для удобства, для написания лаконичных легко читаемых скриптов. Поэтому я и предложил свой вариант
Да, в моём варианте на каждой итерации используется обращение к глобальной таблице table, вызывается функция insert, что сказывается на скорости, но мне он нравится немного больше. Не обижайтесь
0
Mirmik
techpriest
193 / 164 / 42
Регистрация: 27.02.2014
Сообщений: 863
06.01.2017, 22:41 #10
Кстати говоря, если вы соберетесь писать си функцию .

Стандартная функция апи луа, которая кладет элементы в таблицу

C
1
2
3
4
5
6
7
8
9
LUA_API void lua_settable (lua_State *L, int idx) {
  StkId t;
  lua_lock(L);
  api_checknelems(L, 2);
  t = index2addr(L, idx);
  luaV_settable(L, t, L->top - 2, L->top - 1);
  L->top -= 2;  /* pop index and value */
  lua_unlock(L);
}
работает строго с одним элементом за раз в то время, как апи виртуальной машины luaV_settable в действительности умеет забивать по десятку значений за раз. Будите на колыме, используйте его .

P.S. биндить сишные функции к луа не просто просто, а феноменально просто...
0
06.01.2017, 22:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2017, 22:41
Привет! Вот еще темы с ответами:

Превратить строку в массив - C#
Как получить из строки, например "12345", массив символов 1,2,3,4,5 Спасибо Добавлено через 1 минуту Упс, все просто string...

Строку «Программа» превратить в «ргамамроП» - C (СИ)
Дана строка -предложение. Зашифровать ее, поместив вначале все символы, расположенные на четных позициях строки, а затем, в ...

Превратить строку в массив чисел - C++ Builder
У меня есть строка, допустим "1,2,3,4". Мне нужно сделать так, чтобы числа были записаны в массиве.

Превратить строку в вещественное число - PascalABC.NET
У нас есть строка в которой записано число в виде обычной дроби, например '-14665106/5394991'. Как превратить эту сроку в обычное число...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.