Ho una matrice 2d di tipo booleano (non importante) È facile iterare sull'array in stile non funzionale. Come si fa in stile FP?iterazione array scala 2d
var matrix = Array.ofDim[Boolean](5, 5)
per ex, vorrei per scorrere tutte le righe per una determinata colonna e restituire un elenco di int che sarebbe partita una funzione specifica. Esempio: per la colonna 3, scorrere le righe da 1 a 5 per restituire 4, 5 se la cella in (4, 3), (5, 3) corrisponde a una funzione specifica. Thx v molto
def getChildren(nodeId: Int) : List[Int] = {
info("getChildren("+nodeId+")")
var list = List[Int]()
val nodeIndex = id2indexMap(nodeId)
for (rowIndex <- 0 until matrix.size) {
val elem = matrix(rowIndex)(nodeIndex)
if (elem) {
println("Row Index = " + rowIndex)
list = rowIndex :: list
}
}
list
}
Penso che il tuo sol restituirà un array se la struttura iniziale è un array 2d? – jts
Ah, un'altra differenza è che stavo pensando di filtrare direttamente sull'array 2d, ma così facendo, sto perdendo l'indice di riga: val children = matrix.filter (row => row (nodeIndex)) che restituisce 2 array 1d - ma non so quale sia – jts
In realtà, la struttura su cui fingo è un Range, non una Array (come lo erano gli indici che si desideravano nel produzione). Il tipo di risultato è un IndexedSeq [Int] e sembra essere un vettore. Basta fare .toList se si desidera una lista, ma Vector è solitamente una struttura migliore di List. –