プログラミングのお題スレ Part22 (863レス)
上下前次1-新
抽出解除 レス栞
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
647(1): デフォルトの名無しさん [sage] 02/18(火)17:51 ID:ZRfTlf8i(1)
Vecのnewやpushなど普通にcollectに任せる手もあるね
条件付き挿入は汎用にOptionで取捨を示してflat_mapとflattenでも可能
前値など状態を保ちつつ1つにまとめるならfoldでイテレータに流すならscan
一例としてこんな感じ
fn f(input: &[u8]) -> Vec<u8> {
input
.iter()
.scan(None, |pre, &x| {
Some([
pre.replace(x & 1)
.and_then(|p| (p == x & 1).then_some(p + b'0')),
Some(x),
])
})
.flat_map(|list| list.into_iter().flatten())
.collect()
}
>>640
Rust
649: デフォルトの名無しさん [sage] 02/19(水)21:58 ID:Hs/awmG/(1)
>>647
関数型でタブーの可変な変数宣言してもよいなら、もっと簡単になるね。
fn f(input: &[u8]) -> Vec<u8> {
let mut pre = None;
input
.iter()
.flat_map(|&x| {
[
pre.replace(x & 1)
.and_then(|p| (p == x & 1).then_some(p + b'0')),
Some(x),
]
.into_iter()
.flatten()
})
.collect()
}
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.038s