1

文字列のリストがあります

val myStrings = List("One", "Two", "Three")

リストに含まれている文字列が含まれているかどうかを確認したい。

myStrings.exists("One".contains)

これはグーグルから取得します。しかし、私はそれを理解したいです。

私はあなたができることを参照してください"One".contains("O")

チェックするには、意味のあるOne内容が含まれています。Oしかし、 myStrings.exists に渡されたときにパラメーターがどのように機能しないのかわかりません。

私は何が欠けていますか?

4

2 に答える 2

4

これは略記、つまり「シンタックス シュガー」です。

私はあなたが見たことがあると確信していますList("A","B").foreach(println)

これは同じです。パラメーターが 1 つしかない場合は、パラメーターを指定する必要はありません。

の省略形もそうmyStrings.exists("One".contains)です

myStrings.exists("One" contains _)

それ自体は完全な関数リテラルの省略形です

myStrings.exists(x => "One" contains x)

これは、リストcontainsString「One」であるかどうかをチェックするのではなく、「One」にList含まれる aString含まれているかどうかをチェックすることに注意してください。

おそらく、containsメソッド on が必要なだけですList

containsまた、 onListは O(n)であることに注意してください。同じ方法Setが O(1) です。つまり、一定時間です。

于 2013-04-12T20:10:57.817 に答える
1

Function1 を予期する関数またはメソッドに Function1 を渡す場合は、アンダースコアを省略できます。

List#foreachは a を期待するので、 orの代わりにFunction1[X,Unit]言うことができます。myList.foreach(println)myList.foreach(println(_))myList.foreach(x => println(x))

同様に:

scala> val xs = List("a","b","c")
xs: List[String] = List(a, b, c)

scala> val set = Set("c","d","e")
set: scala.collection.immutable.Set[String] = Set(c, d, e)

scala> xs.filter(set.contains)
res0: List[String] = List(c)
于 2013-04-13T01:57:58.937 に答える