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

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

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

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

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

Как превратить в строку контент функции?
Ну, допустим есть ф-ция <?php function...

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

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

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

9
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
20.11.2016, 20:33 2
воспользуйтесь циклом
0
vantfiles
118 / 49 / 24
Регистрация: 07.05.2013
Сообщений: 170
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 / 3
Регистрация: 25.07.2016
Сообщений: 160
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
118 / 49 / 24
Регистрация: 07.05.2013
Сообщений: 170
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
118 / 49 / 24
Регистрация: 07.05.2013
Сообщений: 170
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
624 / 205 / 55
Регистрация: 27.02.2014
Сообщений: 1,088
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

Превратить строку двоичных цифр, прочитанных как число в формате с фиксированной запятой, в целое число
Написать и протестировать функцию, которая превратит строку двоичных цифр,...

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

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


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

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

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