4

複数の配列/別のコレクション内のアイテムの完全な反復に基づいて、Scala で不変のコレクションを作成するための優れたソリューションを共有できますか?

たとえば、Java では以下を使用できます。

List<String> signals = ...;
List<SignalState> states = ...;

List<SignalAndState> result = new ArrayList<~>(signals.size() * states.size());

for (String signal: signals) {
  for (SignalState state: states) {
    // some if() condition or process() function can be here 
    result.add(new SignalAndState(signal, state))
  }
}

Scala を使用してこのようなものを構築するためのベスト プラクティスは何ですか? 同じアプローチ (for() で for() を使用する) は悪い考えだと思います。Scala 言語のオブジェクト関数型の性質とはまったく互換性がありません。

4

1 に答える 1

5

ベスト プラクティスについてはよくわかりませんが、これを達成する方法の 1 つは、for内包表記を使用して探しているコレクションを作成することです。

val signals = List[String](...)
val states = List[SignalState](...)

for(signal <- signals; state <- states) yield new SignalAndState(signal, state)

それはList[SignalAndState]すべての要素で

または、次のようにflatMapandmapを使用して同じ結果を得ることができます。

signals flatMap ( signal => states map ( state => new SignalAndState(signal, state)))
于 2012-11-09T12:52:29.083 に答える