Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use ::std::{
- *,
- iter::FromIterator,
- };
- struct Key(usize, Box<str>);
- const KEY: &str = "Key";
- impl str::FromStr for Key {
- type Err = ();
- fn from_str(s: &str) -> Result<Self, Self::Err>
- {
- let mut s = s.split("=");
- match (s.next(), s.next()) {
- (Some(key), Some(value)) if key.starts_with(KEY) => {
- Ok(Key(key[KEY.len() ..].parse().map_err(mem::drop)?, value.into()))
- },
- _ => Err(()),
- }
- }
- }
- fn main() {
- let input = "Key0=value,Key3=vvalue,Key2=vealue,Key10=vralue,Key4=vtalue,Key1=vyalue,Key17=vualue".to_owned();
- let mut kvs = Vec::
- from_iter(
- (0 .. 100).map(|_| None)
- )
- ;
- input
- .split(",")
- .filter_map(|s| s.trim().parse().ok())
- .for_each(|Key(id, value)| kvs[id] = Some(value))
- ;
- println!("{:?}", itertools::join(kvs.iter().enumerate().filter_map(|(keyid,opt)|match opt{
- None => None,
- Some(value) => Some(format!("Key{}={}",keyid,value))
- }),","));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement