sách gpt4 ai đã đi

vector - 将Map ,Vec >展平为Vec ,然后将其返回到Map ,Vec >

In lại 作者:行者123 更新时间:2023-12-03 11:42:59 29 4
mua khóa gpt4 Nike

我在HashMap<>, Vec>中有数据,我想将该数据作为字节缓冲区(单个Vec)写入文件,然后从文件中读取回去并重建HashMap结构。
是否有建立像这样的平坦化和恢复 map 的算法?我可以将元数据写入文件中,以区分数据分区的位置。由于该项目的性质,我无法使用结构化序列化-我正在加密数据和文件。

1 Câu trả lời

您可以使用以下格式存储它:value1_len | value1_bytes | key1_len | key1_bytes | value2_len | value2_bytes | key2_len | key2_bytes | ...使用标准库(playground)可以轻松完成:

use std::collections::HashMap;
use std::convert::TryInto;

fn serialize(map: &HashMap<>, Vec>) -> Vec {
map.iter().fold(Vec::new(), |mut acc, (k, v)| {
acc.extend(&k.len().to_le_bytes());
acc.extend(k.as_slice());
acc.extend(&v.len().to_le_bytes());
acc.extend(v.as_slice());
acc
})
}

fn read_vec(input: &mut &[u8]) -> Vec {
let (len, rest) = input.split_at(std::mem::size_of::());
let len = usize::from_le_bytes(len.try_into().unwrap());
let (v, rest) = rest.split_at(len);
*input = rest;
v.to_vec()
}

fn deserialize(bytes: &Vec) -> HashMap<>, Vec> {
let mut map = HashMap::new();

let mut left = &bytes[..];
while left.len() > 0 {
let k = read_vec(&mut left);
let v = read_vec(&mut left);
map.insert(k, v);
}

map
}

fn main() {
let mut map = HashMap::new();
map.insert(vec![1, 2, 3], vec![4, 5, 6]);
map.insert(vec![4, 5, 6], vec![1, 2, 3]);
map.insert(vec![1, 5, 3], vec![4, 2, 6]);

let array = serialize(&map);
let recovered_map = deserialize(&array);

assert_eq!(map, recovered_map);
}

关于vector - 将Map ,Vec >展平为Vec ,然后将其返回到Map ,Vec >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62784751/

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com