Rust part16at TECH
Rust part16 - 暇つぶし2ch9:デフォルトの名無しさん
22/06/27 21:57:27.41 TFU41qtv.net
>>987
Stringを自己trimするtrim_in_place()を対称的に短く書くなら
fn trim_in_place(s: &mut String, mut f: impl FnMut(char) -> bool) {
 if let Some(end) = s.rfind(|c| !f(c)) {
  let end = s.ceil_char_boundary(end + 1);
  s.truncate(end);
 }
 if let Some(start) = s.find(|c| !f(c)) {
  s.drain(..start);
 }
}
たとえわずかでも先にendを処理
fは char::is_whitespace など
ただし目的外使用なので長くなるけど置き換え
s.drain(..start);

s.replace_range(..start, "");
こちらはunstableなので長くなるけど置き換え
let end = s.ceil_char_boundary(end + 1);

let end = ((end + 1)..).filter(|&i| s.is_char_boundary(i)).next().unwrap();
ここでendはrfind()で発見済なのでend + 1でunwrap()可能


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch