タイトルの通りなのですが、
rust
1['h', 'e', 'l', 'l', 'o']
このようなalloc::vec::Vec<char>型のベクタの中身をくっつけて
rust
1hello
にしたいです。
for文で回してjoinしようかと思ったのですができませんでした。
何か方法があれば教えてくださいっ!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
Iterator
のcollect()
メソッドを使うとできます。
rust
1fn main() { 2 let cs = ['h', 'e', 'l', 'l', 'o']; // [char; 5]型 3 let s: String = cs.iter().collect(); 4 assert_eq!(s, "hello".to_string()); 5}
collect()
メソッドを使うとイテレータからFromIterator
トレイトを実装した型へ変換できます。ドキュメントにいくつかの使用例が載っていますので参考にしてください。
投稿2020/07/01 12:04
総合スコア2046
0
rust
1['h', 'e', 'l', 'l', 'o']
が式として書かれているならそれはVec<char>
ではなく[char; 5]
(array)になると思います。
(edit) Vec<char>
とするならvec!['h', 'e', 'l', 'l', 'o']
と書きます。
ただarrayの場合も
rust
1let array = ['h', 'e', 'l', 'l', 'o']; 2 3let mut s = "".to_owned(); 4 5// `<&'_ [char; 5] as IntoIterator>`。 今現在のRustでは`array`自体に`IntoIterator`は実装されていない 6for &ch in &array { 7 s.push(ch); 8} 9 10 11assert_eq!(s, "hello"); // `<String as PartialEq<&'_ str>>`
などの書き方で"hello"
を構成できます。 &[char]
(sliceの参照)で与えられている場合も同様です。
Vec<char>
なら直接
rust
1let vec = vec!['h', 'e', 'l', 'l', 'o']; 2 3let mut s = "".to_owned(); 4 5// `<Vec<char> as IntoIterator>` 6for ch in vec { 7 s.push(ch); 8}
とできます。
ただ今回の場合for文を回さなくても"hello"
を構成できます。
Iterator<Item = char>
(またはIterator<Item = &'_ char>
)をIterator::collectでString
にすることが可能です。
rust
1let vec = vec!['h', 'e', 'l', 'l', 'o']; 2 3// `<String as FromIterator<&'_ char>>` 4let s = vec.iter().collect::<String>(); 5 6// `<String as FromIterator<char>>` 7let s = vec.into_iter().collect::<String>();
投稿2020/07/01 12:02
編集2020/07/01 12:07総合スコア86
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
char
ではなくてstr
を用いてはどうでしょう?引用符を二重引用符にして。
rust
1["h", "e", "l", "l", "o"].join("")
char
は特別なUnicode Scalar Valueです、Cみたいにbyte
と同じではありません。だから簡単にjoinできません。
追記
間違いましたので訂正します。
char
は特別なUnicode Scalar Valueです。だからこそ簡単にjoinできます。Cみたいにbyte
でしたら、joinの引数で区切りするとき文字の中に区切りしてしまい文字化けを生んでしまいます。
どうしてまだ実装していませんか?実は5年前もうRustのrepoで実装した例を議論しましたが、主催者いないので止めました。オープンソースコミュニティではこういうこともあります。
投稿2020/07/01 11:55
編集2020/07/02 01:57総合スコア464
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/01 12:45