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

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

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

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

3697閲覧

Swift 配列をprintする際に要素数で改行してprintするやり方

maru.wk

総合スコア30

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/10/31 06:59

編集2017/10/31 06:59

配列をprintする際に、ある要素数で改行して表示するやり方がわかりません。

swift

1let a = [0,2,3,1,2,3,2,5,26,23,...]

という配列を3個刻みで改行して
0,2,3,
1,2,3,
2,5,26,
23,...

のようにprintすることは可能でしょうか?
インターネットで調べたのですが、配列そのものを分割したり、ある要素を削除したりなどしか発見できなかったので質問させていただきました。

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

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

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

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

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

KSwordOfHaste

2017/10/31 07:06

「23,...」の部分は「ある程度以上の要素は省略する」という意味ではなく、以下同様という意味ですか?
maru.wk

2017/10/31 07:07

以下同様という意味です。
fuzzball

2017/10/31 07:08

print(a)と書くのではなく、要素を一つずつ表示するコードは書けますか?
maru.wk

2017/10/31 07:12

a[0]のようなものをfor文で繰り返しでしょうか?
fuzzball

2017/10/31 07:18

そうです。ひとまず改行のことは置いておいて全ての要素を表示できますか?
maru.wk

2017/10/31 07:20

for array in a { print(array) } だと考えます。
fuzzball

2017/10/31 07:31 編集

3個刻みにするなら「今何番目の要素を処理しているか」という情報が必要になりますが、その方法だと要素番号が取得できませんよね?要素番号を取得できるような方法で書けますか?
maru.wk

2017/10/31 07:32

a.countを使えばいいのでしょうか?すみません、ここからよくわかりません;
fuzzball

2017/10/31 07:35 編集

a.countはループの上限値に使います。for文で、例えば0から10までカウント出来ますか?(回答付いているので、これ以上のやりとりが不要なら打ち切って下さい)
KSwordOfHaste

2017/10/31 07:54 編集

余計なおせっかいですが・・・質問者さんの場合for文による方法を学ぶのがよい印象があります。MasakiHoriさんの解法は鮮やかなのですが、その分理解するためには前提知識が多くなると思います。 割り込んでしまって、失礼しました~
maru.wk

2017/10/31 07:45

for b in 0...10 ということでしょうか?
fuzzball

2017/10/31 08:03

「でしょうか?」ではなく、print文を入れて自分で確認して下さい。で、上限値にはa.countを使って、要素の数だけループを回せますよね?
maru.wk

2017/10/31 08:21

はい。0...a.countで回せました。
fuzzball

2017/10/31 08:27 編集

えーと、0...a.countだと最後がハミ出してしまいますよね?例えば、要素が10個なら0〜9にならないといけませんが、0〜10になりますよね?これは 0..<a.count にして下さい。で、要素番号で配列の要素にアクセスする方法は分かりますか?それが分かれば、ひとまずforループで全要素を表示できると思いますが。
maru.wk

2017/10/31 08:35

for array in a[0..<a.count]でできました。
fuzzball

2017/10/31 08:42

いや‥それだと要素番号を取れないですよね?
maru.wk

2017/10/31 08:49

for (number,value) in a.enumerated() {
maru.wk

2017/10/31 08:50

質問の意図を汲みきれず、申し訳ありません。これで要素番号と要素を抽出出来ました
fuzzball

2017/10/31 09:24

そのやり方でも間違いではないのですが、私が長々と書いてきたことが全て無駄になってるんですよね。ということでおしまい。
maru.wk

2017/10/31 09:41

これほど丁寧に解説いただいにも関わらず、申し訳ありません。
guest

回答2

0

ベストアンサー

swift

1let a = [0,2,3,1,2,3,2,5,26,23] 2 3for i in 0..<a.count { 4 if i % 3 == 2 || i == a.count-1 { 5 //3つごとに改行あり → 3で割った余りが2のとき → i % 3 == 2 6 //最後の要素も改行あり → i == a.count-1 7 print("(a[i]),") 8 } else { 9 //それ以外は改行なし → terminator: "" 10 print("(a[i]),", terminator: "") 11 } 12}

出力

0,2,3, 1,2,3, 2,5,26, 23,

せっかくなのでfor (number, value) in a.enumerated()を使ってまとめると、

swift

1for (number, value) in a.enumerated() { 2 print("(value),", terminator: number % 3 == 2 || number == a.count-1 ? "\n" : "") 3}

投稿2017/10/31 09:38

fuzzball

総合スコア16731

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

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

maru.wk

2017/10/31 09:42

丁寧に解説いただきありがとうございます。お時間を取らせてしまい申し訳ありませんでした。
guest

0

これでもできますがこれでいいですか?

swift

1struct ThreeCount: Sequence, IteratorProtocol { 2 var current = 0 3 mutating func next() -> Bool? { 4 let res = current 5 current = (current + 1) % 3 6 return res == 2 7 } 8} 9 10let a = [0, 2, 3, 1, 2, 3, 2, 5, 26, 23] 11 12zip(a, ThreeCount()).forEach { 13 print($0.0, terminator: $0.1 ? ",\n" : ",") 14} 15print("")

投稿2017/10/31 07:27

編集2017/10/31 07:55
MasakiHori

総合スコア3384

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

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

maru.wk

2017/10/31 07:58

解答ありがとうございます。自分にはわからないことがたくさんあり、解答していただいたプログラムを使いこなすことはできないようです。 いずれこのようなプログラムをかけるように、勉強していきたいと思います。
KSwordOfHaste

2017/10/31 08:00

zipの代わりに a.enumerated().forEach { // $0.0が指標 // $0.1が要素 } でもよいのではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問