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

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

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

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

Q&A

解決済

4回答

1793閲覧

二つの配列を同時にfor文で回す方法はありますか?

aaaaaachannel

総合スコア37

Swift

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

0グッド

0クリップ

投稿2018/04/19 02:07

swift

1 2 for score in standardRankDataScore{ 3 for level in standardRankDataLevel{ 4 standardRankData2 += [(score: score,level:level)] 5 } 6 }

の結果は当たり前ですが、

[(score: 888, level: "Lv.88"), (score: 888, level: "Lv.99"), (score: 888, level: "Lv.50"), (score: 888, level: "Lv.49"), (score: 888, level: "Lv.30"), (score: 999, level: "Lv.88"), (score: 999, level: "Lv.99"), (score: 999, level: "Lv.50"), (score: 999, level: "Lv.49"), (score: 999, level: "Lv.30"), (score: 99, level: "Lv.88"), (score: 99, level: "Lv.99"), (score: 99, level: "Lv.50"), (score: 99, level: "Lv.49"), (score: 99, level: "Lv.30"), (score: 50, level: "Lv.88"), (score: 50, level: "Lv.99"), (score: 50, level: "Lv.50"), (score: 50, level: "Lv.49"), (score: 50, level: "Lv.30"), (score: 50, level: "Lv.88"), (score: 50, level: "Lv.99"), (score: 50, level: "Lv.50"), (score: 50, level: "Lv.49"), (score: 50, level: "Lv.30")]

になるのですが、
(888,"Lv.88"),
(999,"Lv.99"),
(99,"Lv.50"),
(50,"Lv.49"),
(50,"Lv.30")
とするために二つの配列を同時にfor文で回したいです。
そんなコードはないのでしょうか。
それとも何か他の方法があったりしますか??

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

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

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

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

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

guest

回答4

0

ベストアンサー

for

swift

1var standardRankData2 = [(Int, String)]() 2for i in 0..<min(standardRankDataScore.count, standardRankDataLevel.count) { 3 standardRankData2.append((standardRankDataScore[i], standardRankDataLevel[i])) 4} 5print(standardRankData2) 6//=> [(888, "Lv.88"), (999, "Lv.99"), (99, "Lv.50"), (50, "Lv.49"), (50, "Lv.30")]

zip + map

swift

1let standardRankData2 = zip(standardRankDataScore, standardRankDataLevel).map {($0, $1)} 2print(standardRankData2) 3//=> [(888, "Lv.88"), (999, "Lv.99"), (99, "Lv.50"), (50, "Lv.49"), (50, "Lv.30")]

zip + reduce

swift

1let standardRankData2 = zip(standardRankDataScore, standardRankDataLevel).reduce(into: [(Int, String)]()) {$0.append(($1.0, $1.1))} 2print(standardRankData2) 3//=> [(888, "Lv.88"), (999, "Lv.99"), (99, "Lv.50"), (50, "Lv.49"), (50, "Lv.30")]

投稿2018/04/19 02:28

編集2018/04/19 05:05
fuzzball

総合スコア16731

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

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

aaaaaachannel

2018/04/19 08:51

大変わかりやすいです。ありがとうございます。
guest

0

先越されましたが、動作確認済みです。

swift

1var standardRankDataScore = [888, 999, 99, 50, 50] 2var standardRankDataLevel = ["Lv.88", "Lv.99", "Lv.50", "Lv.49", "Lv.30" ] 3var standardRankData2: Array<Any> = [] 4for i in 0..<standardRankDataScore.count{ 5 standardRankData2 += [(score: standardRankDataScore[i],level:standardRankDataLevel[i])] 6} 7 8print(standardRankData2)

投稿2018/04/19 02:29

iwamoto_takaaki

総合スコア2883

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

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

0

zip が使えそうです。

Swift

1for (score, level) in zip(standardRankDataScore, standardRankDataLevel) { 2 standardRankData2 += [(score: score,level:level)] 3}

Swift書いたことないんで細かいとこ間違ってるかもしれませんが。。。

投稿2018/04/19 02:23

kazto

総合スコア7196

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

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

0

swiftをしらないのですが、添字によるループは使えないでしょうか?

while idx < max_arr_cont
a=a+arrA[idx]+arrB[idx]
loop

みたいな

投稿2018/04/19 02:18

newbiemstr

総合スコア43

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問