Aleksandr
давай, допилим
🏁Александр
offset - 1 length - 2 по идеи там 1 символ должен быть
🏁Александр
если length с начало строки
Aleksandr
не понял
🏁Александр
если у нас строка - привет, и мы берем длинну - 2 то получаем пр
🏁Александр
а потом еще на 1 символ отступаем - р выходит
Aleksandr
ты про минус или что?
🏁Александр
нет не про минус
🏁Александр
сначало отмеряем 2 символа с начало строки
🏁Александр
это будет наша строка...
🏁Александр
а потом еще один символ в начале
Aleksandr
ты в пхп substr не юзал?)
🏁Александр
это будет с оффсетом
Aleksandr
сначала сдвиг, потом длина от начала сдвига
🏁Александр
юзал юзал
Aleksandr
1, 2 это [n:n+2) где n = 1
.
Написал свою реализацию,вроде работает 😂 func Substring(line string, offset, length int) string { str := []rune(line) strlen := len(str) strend := offset + length if strend > strlen { return string(str[offset:strlen]) } else { return string(str[offset:strend]) } }
🏁Александр
https://play.golang.org/p/n2J37bM4oWV
🏁Александр
а вот и правильный вариант
🏁Александр
никто не сделал явный возрат ошибок
🏁Александр
нельзя править за юзвера, он туповат
🏁Александр
а теперь забенчим 🙂
Илья
``` // без конвертации к рунам и доп памяти func substring(s string, start int, end int) string { start_str_idx := 0 i := 0 for j := range s { if i == start { start_str_idx = j } if i == end { return s[start_str_idx:j] } i++ } return s[start_str_idx:] } ```
Aleksandr
нельзя править за юзвера, он туповат
можно. это стандартная функция с одинаковым поведеним в куче языков
Aleksandr
https://play.golang.org/p/Ki2yITiFbhh
Илья
Да с мобилы зашел, не сиотрел)
.
Интересно, почему нет такой функции в библиотеке strings
.
Она бы там лишней не была
.
Или это как история с округлением чисел
.
Нет единственного правильного варианта
🏁Александр
BenchmarkZelenin-4 50000000 38.3 ns/op BenchmarkRuelephant-4 10000000 151 ns/op
Aleksandr
дай код бенча
Aleksandr
в 5 раз разница. на китайском тексте у меня в 50 раз
Aleksandr
при росте размера текста разница будет увеличиваться в мою пользу
Stepan
Попробую ещё раз повторить вопрос) Как можно быстрее чем 2 вложенных цикла сравнить поэлементно 2 отсортированных спайса?
Aleksandr
https://play.golang.org/p/9OnAYmbAO4k
да, так же плюс минус
Aleksandr
https://play.golang.org/p/uh-XZrHxDTc
Aleksandr
а вот так разница 400 раз
Aleksandr
https://play.golang.org/p/wiLcQfh7p3d
Aleksandr
а вот так 25.5 т
🏁Александр
мне интересно это руны такие тормозные
Aleksandr
а вот так 25.5 т
https://play.golang.org/p/QLuDPqOWijJ
Aleksandr
добавил первый вариант функции. быстрее в 2т
Aleksandr
мне интересно это руны такие тормозные
а ты понимаешь что такое руна?
Aleksandr
и как они из байт получаются?
Aleksandr
то есть вот у тебя слайс байт и что под капотом происходит, чтобы первую руну например получить?
Aleksandr
руна у тебя из 1-4 байтов. соответственно тебе надо однобайтную поискать, потом двух- итд
🏁Александр
The rune type is an alias for int32, and is used to emphasize than an integer represents a code point.
Aleksandr
да. и это не совсем простая операция из одного другое получить
🏁Александр
а он перебором конвертирует? O_o
Aleksandr
не совсем, но почти
Aleksandr
не помню навание функции типа utf8.DecodeRuneSomeThing..
Aleksandr
https://play.golang.org/p/1nTvIC9cnVd
🏁Александр
хехе
🏁Александр
я читер
🏁Александр
https://play.golang.org/p/-np8mthDXij
🏁Александр
запусти это говно 🙂
Aleksandr
не считалка, так как сигнатура не та
🏁Александр
ну функция то свое дело делает 🙂
Aleksandr
нет
Aleksandr
сигнатура не та
🏁Александр
тебе закешировать строку в переменной? 🙂
🏁Александр
щаз сойдутся сигнатуры
🏁Александр
но я это читерство согласен
🏁Александр
зато как быстро 🙂
Aleksandr
https://play.golang.org/p/1gCFvQwpXTB
Aleksandr
так еще быстрее
Aleksandr
22 строка
Aleksandr
если ты меняешь сигнатуру, ты выносишь часть сложности наружу. а бенчим ты мы стоимость функции
🏁Александр
да понятно жу
🏁Александр
что ты зануду врубил
Aleksandr
не шути со мной так
🏁Александр
жалко быстрого способа сконвертить []rune в строку нет 🙁
🏁Александр
что-то он печально и долго даже в этом направлении собирает
🏁Александр
хотя какой там перебор
Aleksandr
потому что это то же самое но в обратном направлении
🏁Александр
ну там перебирать ничего не надо
🏁Александр
уже понятно какой символ же