🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Q&A

解決済

2回答

1838閲覧

scalaのタプルのシーケンスからタプルの要素を取り出したい

yochun02

総合スコア76

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

0グッド

1クリップ

投稿2019/10/03 12:14

編集2019/10/04 05:39

scalaで以下の処理をするにはどうしたらよいかわかりません。

plain

1val x: Seq[(Int, Seq[String])] = [ 2(1, ["hoge1", "fuga1", "piyo1"]), 3(2, ["hoge2", "fuga2", "piyo2"]), 4(3, ["hoge3", "fuga3"]) 5] 6val y: Seq[Int] // > y = [1, 2, 3] となるようにしたい

plain

1val y: Seq[String] // > y = ["1 - hoge1", 2 "1 - fuga1", 3 "1 - piyo1", 4 "2 - hoge2", 5 "2 - fuga2", 6 "2 - piyo2", 7 "3 - hoge3", 8 "3 - fuga3" 9] 10// タプルの2番目の要素数の合計数を持つリストを生成したい(今の場合、3 + 3 + 2 = 8 個の要素数を持つ)

べた書きにすると

plain

1scala> val y: Seq[String] = List(s"${x(0)._1} - ${x(0)._2(0)}", 2 s"${x(0)._1} - ${x(0)._2(1)}", 3 s"${x(0)._1} - ${x(0)._2(2)}", 4 s"${x(1)._1} - ${x(1)._2(0)}", 5 s"${x(1)._1} - ${x(1)._2(1)}", 6 s"${x(1)._1} - ${x(1)._2(2)}", 7 s"${x(2)._1} - ${x(2)._2(0)}", 8 s"${x(2)._1} - ${x(2)._2(1)}")

実行結果

plain

1y: Seq[String] = List(1 - hoge1, 1 - fuga1, 1 - piyo1, 2 - hoge2, 2 - fuga2, 2 - piyo2, 3 - hoge3, 3 - fuga3)

なのですが、mapやリスト操作に慣れていないので効率よい書き方がわかりません

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

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

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

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

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

guest

回答2

0

ベストアンサー

実行結果にある結果が欲しいならこうですかね

scala

1x.flatMap{ 2 case (idx, list) => list.map(item => s"$idx - $item") 3}

投稿2019/10/20 17:09

rysh

総合スコア874

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

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

0

これはScalaのコードじゃないのでは? と思いましたが……

scala

1val x: Seq[(Int, Seq[String])] = Seq( 2(1, Seq("hoge1", "fuga1", "piyo1")), 3(2, Seq("hoge2", "fuga2", "piyo2")), 4(3, Seq("hoge3", "fuga3")) 5) 6val y: Seq[Int] = x.map(_._1)

実行結果

plain

1scala> val x: Seq[(Int, Seq[String])] = Seq( 2 | (1, Seq("hoge1", "fuga1", "piyo1")), 3 | (2, Seq("hoge2", "fuga2", "piyo2")), 4 | (3, Seq("hoge3", "fuga3")) 5 | ) 6x: Seq[(Int, Seq[String])] = List((1,List(hoge1, fuga1, piyo1)), (2,List(hoge2, fuga2, piyo2)), (3,List(hoge3, fuga3))) 7 8scala> val y: Seq[Int] = x.map(_._1) 9y: Seq[Int] = List(1, 2, 3)

投稿2019/10/03 12:32

quickquip

総合スコア11231

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

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

yochun02

2019/10/03 13:37 編集

解答ありがとうございます。確かにコードではなかったですね、失礼しました..。 追加で質問なんですが、要素2の情報も織り交ぜて新しいリストにすることはできますか? 例えば、 y: Seq[String] = List("1=hoge1,fuga1,piyo1", "2=hoge2,fuga2,piyo2", "3=hoge3,fuga3") といったような加工が最終的な目標です
quickquip

2019/10/04 00:20

わからないポイントを質問に書くのがいいかと思います。
quickquip

2019/10/04 00:22

何ができなくて困っているのかわからない、と言った方がいいでしょうか。
yochun02

2019/10/04 01:25 編集

質問が下手くそで申し訳ないです。 型をSeq[(any,Seq[any])]→ Seq[any] に変換したいのです。(その際に、元々あったタプルの情報をまとめていることが必要です。 質問を編集しましたので御手数ですがご確認出来ますでしょうか?
quickquip

2019/10/04 02:10

何で詰まっているのかわからないのでダメだったコードの例を書きましょう
yochun02

2019/10/04 02:59 編集

mapやforでのリスト操作が根本的な不明点です。現時点での自分のコードを追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問