Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
5 / 5 / 3
Регистрация: 25.07.2016
Сообщений: 182
1

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

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


То есть нужен код превращающий a = "Hello" в b = {"H", "e", "l", "l", "o"}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2016, 17:36
Ответы с готовыми решениями:

Как превратить строку в формулу
Здравствуйте нужна помощь! Я новичок в программировании! У меня возникла такая проблема. В поле...

Как превратить строку в переменную?
Добрый день. Подскажите как реализовать следующую задачу. Есть переменные которые получены...

Как превратить строку в переменную
Добрый день. Подскажите как реализовать следующую задачу. Есть переменные которые получены...

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

9
90 / 87 / 11
Регистрация: 20.11.2008
Сообщений: 724
20.11.2016, 20:33 2
воспользуйтесь циклом
0
589 / 403 / 107
Регистрация: 07.05.2013
Сообщений: 1,424
Записей в блоге: 1
31.12.2016, 02:33 3
Lua
1
2
3
4
5
6
7
8
9
10
11
12
function str2arr( s )
 
    local res = {}
 
    for i = 1, #s do
    
        res[ i ] = s:sub( i,i )
 
    end
 
    return res
end
0
5 / 5 / 3
Регистрация: 25.07.2016
Сообщений: 182
31.12.2016, 08:02  [ТС] 4
R = "строка"
Lua
1
2
3
local W = {}
local j = 1
for i in string.gmatch(R, ".") do W[j] = i; j=j+1 end
0
90 / 87 / 11
Регистрация: 20.11.2008
Сообщений: 724
31.12.2016, 12:18 5
на мой взгляд, лучший вариант это
Lua
1
2
3
4
5
6
7
function str2arr(str)
  local arr={}
  for ch in str:gmatch'.' do
    table.insert(arr,ch)
  end
  return arr
end
0
589 / 403 / 107
Регистрация: 07.05.2013
Сообщений: 1,424
Записей в блоге: 1
02.01.2017, 02:57 6
> на мой взгляд, лучший вариант это

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

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

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

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

Пожалуйста, не обижайтесь, мы ведь здесь обмениваемся опытом, а не выясняем кто круче, правда?
0
90 / 87 / 11
Регистрация: 20.11.2008
Сообщений: 724
03.01.2017, 00:25 9
Цитата Сообщение от vantfiles Посмотреть сообщение
если нужна скорость, пишут не на си, а на ассемблере
и Си, и ассемблер компилируется в одинаковые инструкции и выполняется с одинаковой скоростью
и в них нет различия между строкой и массивом символов
Но это тут не при чём
В терминах Lua, C-функцией называют функцию, написанную не на самом Lua, а встроенную в него изнутри. Такие функции пишутся не обязательно на C, а на чём угодно: от машинных кодов до VBA
Если Lua не хватает скорости, то используют их
Lua правильнее использовать не там где нужна скорость, а для удобства, для написания лаконичных легко читаемых скриптов. Поэтому я и предложил свой вариант
Да, в моём варианте на каждой итерации используется обращение к глобальной таблице table, вызывается функция insert, что сказывается на скорости, но мне он нравится немного больше. Не обижайтесь
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,177
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2017, 22:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как превратить в строку контент функции?
Ну, допустим есть ф-ция <?php function f_zak_line($node,$field_zak_adress,$feildName) { ?> ...

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

Как содержимое document xml, превратить строку?
Добрый день есть объект класса Document document, в который я положил элементы ХМЛ. Как мне данный...

API возращает строку со значениями, как превратить её в массив
Добрый день. Нашел код, к моему сайту который мне необходим, где мне необходимо было работать с...


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

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

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