簡體   English   中英

如何基於其他集合的所有元素的笛卡爾積構建集合?

[英]How to build a collection based on Cartesian product of all elements of other collections?

你可以根據幾個數組/其他集合中項目的完整迭代,共享任何在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構建smth的最佳實踐是什么? 我認為,相同的方法(在for()中使用for())是個壞主意,並且根本不兼容Scala語言的對象功能。

我不知道最好的做法,但你可以做到這一點的方法之一是我們使用for理解去創造你正在尋找的集合:

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

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

這應該產生一個包含所有元素的List[SignalAndState]

或者,您可以使用flatMapmap來完成相同的結果,例如:

signals flatMap ( signal => states map ( state => new SignalAndState(signal, state)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM