質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

1回答

169閲覧

Rust で、配列のスライスを返す方法を教えてください。

KN2018

総合スコア19

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2024/11/15 16:41

Rust の初心者ですみません。テトリスを考えていて、以下のような配列を考えています。
struct Field([Option<Color>; 10 * 20]);
横方向が10個、縦方向が20個と考えています。

このとき、この配列から、横1行につき1つの配列のスライス &[Option<Color>; 10] となるような、20個の配列を返す関数を作りたいのですが、どのように書くのが一番良いでしょうか?
以下のような関数を考えています。
fn split_lines(&self) -> [&[Option<Color>]; 20]

C言語の考え方をしてしまっていて、Rust らしくない考え方かもしれないと思っています。このような関数を考えるよりも、よりよい考え方があればどうぞご教授下さるよう、どうぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KN2018

2024/11/15 17:04

追加ですみません。以下のような方法で利用しようと思っているのですが、今の質問方法ではうまくいかないと分かりました。 self.split_lines().enumerate(). 以下操作が続く 初心者の質問ですみませんが、enumerate() が利用できるようにイテレータを返す方法を知りたい、ということが正しい質問の仕方であったと思っています。すみませんが、どうぞよろしくお願いいたします。
bsdfan

2024/11/16 02:18

Rust でイテレータを返す関数を書こうとすると、型の書き方がわけわからなくなることも多いので、スライスとかVecで返して、受けた側で iter() か into_iter() するのでもいいんじゃないでしょうか。
KN2018

2024/11/16 06:17

いろいろな手法を教えてくださって、大変ありがとうございます。つい先日から Rust に関心を持ち始めて、知識がない状態ですので、とても参考になります。時間を割いてコメントをしてくださって、ありがとうございました。
guest

回答1

0

ベストアンサー

愚直に書いた場合

fn get_options<T>(x:&[Option::<T>])->[&[Option::<T>]; 20]{ let mut arr:[&[Option::<T>]; 20]=Default::default(); let (mut min,mut max)=(0,10); for p in 0..20{ arr[p]=&(*x)[min..max]; (min,max)=(max,max+10); } arr }
fn main(){ let e:[Option::<i32>; 10*20]=[Some::<i32>(0); 10*20]; let log:[&[Option::<i32>]; 20]=get_options(&e); for p in log{ println!("{:?}",p); } }
[Some(0), Some(0), Some(0), Some(0), Some(0), Some(0), Some(0), Some(0), Some(0), Some(0)] . .

という具合なので、これをいい感じにリファクタリングするか、この原理をベースにライブラリの関数を漁ってみましょう

投稿2024/11/16 01:21

Manabu

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KN2018

2024/11/16 06:13

丁寧に教えてくださって、大変ありがとうございます。愚直に書くとすると、どのようになるかを知りたかったので、まさしく知りたいことを教えてもらえて感謝しております! 貴重な時間を割いてコードを書いてくださって、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問