Size: a a a

2020 December 13

СТ

Семён Трояновский... in Rust Beginners
Саша
штиль и блокчейн
@rust_jobs
о, спс 👌 на hh что-то вообще тускло
источник

АК

Алексей Кравченко... in Rust Beginners
Привет, друзья.

Есть огромный фаил, 130 000 000 строк +.

Как можно узнать точное кол-во строк не загружая его в память целиком, кроме как итератором пройтись по линиям и посчитать?)
источник

IB

Ilya Bogdanov in Rust Beginners
никак)
источник

АК

Алексей Кравченко... in Rust Beginners
Понял, единственное нашел красивее решение чем писать цикл.

Вместо:

let counter = 0;
for _ in reader.lines() {
   counter += 1;
}
сделать
reader.lines().count();
источник

IB

Ilya Bogdanov in Rust Beginners
Ну у тебя же итератор, есть метод count: lines().count()
источник

АК

Алексей Кравченко... in Rust Beginners
+
источник

АК

Алексей Кравченко... in Rust Beginners
Спасибо!)
источник

MS

Max Syskov in Rust Beginners
Алексей Кравченко
Привет, друзья.

Есть огромный фаил, 130 000 000 строк +.

Как можно узнать точное кол-во строк не загружая его в память целиком, кроме как итератором пройтись по линиям и посчитать?)
Если размер строк одинаковый, можно, по идее, FILE_SIZE / ROW_SIZE.
источник

АК

Алексей Кравченко... in Rust Beginners
К сожалению не одинаковый, но спасибо за идею!
источник

IB

Ivan Boldyrev in Rust Beginners
Алексей Кравченко
Привет, друзья.

Есть огромный фаил, 130 000 000 строк +.

Как можно узнать точное кол-во строк не загружая его в память целиком, кроме как итератором пройтись по линиям и посчитать?)
Грузить в буфер фиксированного размера, и считать разделители строк. Буфер любого размера, хоть 1 байт (но тогда будут накладные расходы на чтение больше).
источник

IB

Ilya Bogdanov in Rust Beginners
Ivan Boldyrev
Грузить в буфер фиксированного размера, и считать разделители строк. Буфер любого размера, хоть 1 байт (но тогда будут накладные расходы на чтение больше).
BufReader именно это и предоставляет с методом lines
источник

r

red75prime in Rust Beginners
Ilya Bogdanov
BufReader именно это и предоставляет с методом lines
Нет, там кроме поиска разделителей выделяется память под строку.
источник

IB

Ivan Boldyrev in Rust Beginners
red75prime
Нет, там кроме поиска разделителей выделяется память под строку.
Именно. На каждый раз дёргается алокатор (а то и несколько раз). И одиночная гигантская строка не влезет в память, например.
источник

IB

Ilya Bogdanov in Rust Beginners
хм, да, действительно, спасибо
источник

d

drjackild in Rust Beginners
Всем привет) Ребят, а как в расте сконвертировать u8 в f64? Мне надо получить логарифм по основанию 2, а log2 метод только у флоатов есть
источник

A

Aragaer in Rust Beginners
у тебя есть целое число от 0 до 255 и тебе надо его логарифм по основанию 2?
источник

ИЛ

Иван Лещенко... in Rust Beginners
drjackild
Всем привет) Ребят, а как в расте сконвертировать u8 в f64? Мне надо получить логарифм по основанию 2, а log2 метод только у флоатов есть
f64::from(u8)
источник

A

Aragaer in Rust Beginners
в виде целого числа или надо точное значение?
источник

d

drjackild in Rust Beginners
Aragaer
в виде целого числа или надо точное значение?
в виде целого числа, мне просто надо количество целых бит в нем
источник

A

Aragaer in Rust Beginners
не количество бит, а номер старшего ненулевого бита
источник