我不知道什麼是下面的代碼片斷的效率:效率Source.fromFile
val lst = Source.fromFile(f).getLines.toList
當發出lst.contains(x)
,
豈不是f
正在重新掃描,或者是它的情況下搜索是否依靠新創建的列表中的f
的內存內容?
在此先感謝。
我不知道什麼是下面的代碼片斷的效率:效率Source.fromFile
val lst = Source.fromFile(f).getLines.toList
當發出lst.contains(x)
,
豈不是f
正在重新掃描,或者是它的情況下搜索是否依靠新創建的列表中的f
的內存內容?
在此先感謝。
搜索依賴於內存中的內容。它只被調用一次toList
被調用。
如何更好地從source直接看到。 Source.fromFile
返回scala.io.BufferedSource
。 getLines
返回BufferedLineIterator。
這是在BufferedLineIterator中,讀取文件的內容。
override def hasNext = {
if (nextLine == null)
nextLine = lineReader.readLine
nextLine != null
}
override def next(): String = {
val result = {
if (nextLine == null) lineReader.readLine
else try nextLine finally nextLine = null
}
if (result == null) Iterator.empty.next
else result
}
}
調用toList
使用next
和hasNext
上面導出列表。所以lst
已經包含了文件的所有元素。
做lst.contains(x)
遍歷列表作爲任何其他列表。
一旦使用了toList,它將向您返回不可變列表進行操作。您的文件將不會被重新掃描,您正在執行的操作列表中您有