次のスニペットの効率はどうなのだろうか:
val lst = Source.fromFile(f).getLines.toList
発行時lst.contains(x)
、
再スキャンされているということですか、それとも、検索が新しく作成されたリストのf
メモリ内コンテンツに依存しているということですか?f
前もって感謝します。
次のスニペットの効率はどうなのだろうか:
val lst = Source.fromFile(f).getLines.toList
発行時lst.contains(x)
、
再スキャンされているということですか、それとも、検索が新しく作成されたリストのf
メモリ内コンテンツに依存しているということですか?f
前もって感謝します。
検索はメモリ内のコンテンツに依存しています。そして、呼び出されたときにのみロードさtoList
れます。
ソースから直接見る方が良い方法。 Source.fromFile
を返しますscala.io.BufferedSource
。BufferedLineIteratorgetLines
を返します。
ここは 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)
実行すると、他のリストと同様にリストが繰り返されます。