リスト要素の削除とフィルタリング
Scalaでは、リストをフィルタリングして要素を削除できます。
scala> val courses = List("Artificial Intelligence", "Programming Languages", "Compilers", "Networks", "Databases")
courses: List[java.lang.String] = List(Artificial Intelligence, Programming Languages, Compilers, Networks, Databases)
いくつかのクラスを削除しましょう:
courses.filterNot(p => p == "Compilers" || p == "Databases")
removeを使用することもできますが、filterまたはfilterNotを優先して非推奨になりました。
インデックスで削除する場合は、を使用してリスト内の各要素を順序付きインデックスに関連付けることができますzipWithIndex
。したがって、次のようにcourses.zipWithIndex
なります。
List[(java.lang.String, Int)] = List((Artificial Intelligence,0), (Programming Languages,1), (Compilers,2), (Networks,3), (Databases,4))
courses.filterNot(_._2 == 1)
これから2番目の要素を削除するには、リストを提供するタプルのインデックスを参照できます。
res8: List[(java.lang.String, Int)] = List((Artificial Intelligence,0), (Compilers,2), (Networks,3), (Databases,4))
最後に、別のツールを使用indexWhere
して、任意の要素のインデックスを検索します。
courses.indexWhere(_ contains "Languages")
res9: Int = 1
アップデートをやり直してください
各リストから対応する要素を削除する関数を作成しています。私が知っているのは、1)インデックスが対応し、2)ユーザーがコース名を入力することだけです。filterNotを使用して各リストから対応する要素を削除するにはどうすればよいですか?
Nikitaのアップデートと同様に、各リストの要素を「マージ」する必要があります。したがって、関連する要素を保持するには、コース、メリット、日、および時間をタプルまたはクラスに入れる必要があります。次に、タプルの要素またはクラスのフィールドでフィルタリングできます。
対応する要素をタプルに結合すると、このサンプルデータでは次のようになります。
val courses = List(Artificial Intelligence, Programming Languages, Compilers, Networks, Databases)
val meridiems = List(am, pm, am, pm, am)
val times = List(100, 1200, 0100, 0900, 0800)
val days = List(MWF, TTH, MW, MWF, MTWTHF)
それらをzipと組み合わせる:
courses zip days zip times zip meridiems
val zipped = List[(((java.lang.String, java.lang.String), java.lang.String), java.lang.String)] = List((((Artificial Intelligence,MWF),100),am), (((Programming Languages,TTH),1200),pm), (((Compilers,MW),0100),am), (((Networks,MWF),0900),pm), (((Databases,MTWTHF),0800),am))
この忌まわしさは、ネストされたタプルをタプルに平坦化します。より良い方法があります。
zipped.map(x => (x._1._1._1, x._1._1._2, x._1._2, x._2)).toList
作業するタプルの素晴らしいリスト。
List[(java.lang.String, java.lang.String, java.lang.String, java.lang.String)] = List((Artificial Intelligence,MWF,100,am), (Programming Languages,TTH,1200,pm), (Compilers,MW,0100,am), (Networks,MWF,0900,pm), (Databases,MTWTHF,0800,am))
最後に、を使用してコース名に基づいてフィルタリングできますfilterNot
。例えばfilterNot(_._1 == "Networks")
List[(java.lang.String, java.lang.String, java.lang.String, java.lang.String)] = List((Artificial Intelligence,MWF,100,am), (Programming Languages,TTH,1200,pm), (Compilers,MW,0100,am), (Databases,MTWTHF,0800,am))