Mam tablicę 2d typu boolean (nie ważne) Łatwo jest iterować po tablicy w niefunkcjonalnym stylu. Jak to zrobić w stylu FP?2d iteracja szeregowa scala
var matrix = Array.ofDim[Boolean](5, 5)
dla ex, Chciałbym iterację wszystkich wierszy dla danej kolumnie i zwraca listę int, które odpowiadają określonej funkcji. Przykład: dla kolumny 3 wykonaj iterację w wierszach od 1 do 5, aby powrócić do 4, 5, jeśli komórka w punkcie (4, 3), (5, 3) jest zgodna z funkcją specif. Thx v znacznie
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
}
Myślę, że twój zol zwróciłby tablicę, gdyby początkowa struktura była tablicą 2d? – jts
Ah, inną różnicą jest to, że myślałem o filtrowaniu bezpośrednio na tablicy 2d, ale przez to tracę indeks wiersza: val children = matrix.filter (row => row (nodeIndex)), który zwraca 2 tablice 1d - ale nie wiem, który z nich – jts
Niezupełnie, struktura, którą robię fitering jest Range, a nie Array (jak to było indeksy, których chciałeś w wydajność). Typ wyniku to IndexedSeq [Int], a tak się składa, że jest to Vector. Po prostu wykonaj polecenie .toList, jeśli chcesz mieć listę, ale wektor jest zazwyczaj lepszą strukturą niż lista. –