4

次のスニペットの効率はどうなのだろうか:

val lst = Source.fromFile(f).getLines.toList

発行時lst.contains(x)

再スキャンされているということですか、それとも、検索が新しく作成されたリストのfメモリ内コンテンツに依存しているということですか?f

前もって感謝します。

4

2 に答える 2

4

検索はメモリ内のコンテンツに依存しています。そして、呼び出されたときにのみロードさtoListれます。

ソースから直接見る方が良い方法。 Source.fromFileを返しますscala.io.BufferedSourceBufferedLineIteratorgetLinesを返します。

ここは 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)実行すると、他のリストと同様にリストが繰り返されます。

于 2013-07-30T06:34:25.073 に答える