[過去ログ] Rust part21 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
441
(1): デフォルトの名無しさん [sage] 2023/10/08(日) 08:07:41.64 ID:WAd1DVRF(1/3) AAS
同等に書けてないでしょw
474
(3): デフォルトの名無しさん [sage] 2023/10/11(水) 23:18:11.74 ID:vJm7EO/F(1) AAS
>>441
>>430
430(6): デフォルトの名無しさん [sage] 2023/10/07(土) 06:46:44.80 ID:bWLG2vp7(1) AAS
mut無しとはこういうことか
外部リンク:play.rust-lang.org

fn qsort<T: Copy+Ord>(list: &[T]) -> Vec<T> {
match list {
[pivot, ..] => {
let (smaller, rest): (Vec<T Vec<T>) =
list[1..].iter().partition(|&i| i < pivot);
[qsort(&smaller), vec![*pivot], qsort(&rest)].concat()
},
_ => vec![]
}
}

fn main() {
let list = [9, 0, 7, 3, 6, 1, 2, 4, 8, 5];
println!("{:?}", list);
println!("{:?}", qsort(&list));
}
がVec使用だから同等でないという話ならばRustにもリンクリストがあるよ
リンクリストに特化したパターンマッチング構文や結合構文はないけれど
例えばTをCopyせずそのまま使うならば

use std::collections::LinkedList;

fn qsort<T: PartialOrd>(mut list: LinkedList<T>) -> LinkedList<T> {
 if let Some(pivot) = list.pop_front() {
  let (smaller, rest): (LinkedList<T LinkedList<T>) =
   list.into_iter().partition(|x| x < &pivot);
  // concat
  list = qsort(smaller);
  list.extend([pivot]);
  list.extend(qsort(rest));
 }
 list
}

fn main() {
 let list = LinkedList::from([9, 0, 7, 3, 6, 1, 2, 4, 8, 5]);
 println!("{:?}", list);
 println!("{:?}", qsort(list));
}
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.044s