jke*_*eys 10 functional-programming scala list filter
列表在Scala中是不可变的,所以我试图弄清楚如何"删除" - 实际上,创建一个新的集合 - 该元素然后关闭列表中创建的间隙.这听起来像是一个使用地图的好地方,但我不知道如何开始这个实例.
课程是一个字符串列表.我需要这个循环,因为我实际上有几个列表,我需要删除该索引处的元素(我使用多个列表来存储列表中的数据,我只是通过简单地确保索引将始终这样做跨列表对应).
for (i <- 0 until courses.length){
if (input == courses(i) {
//I need a map call on each list here to remove that element
//this element is not guaranteed to be at the front or the end of the list
}
}
}
Run Code Online (Sandbox Code Playgroud)
让我为这个问题添加一些细节.我有四个列表,通过索引相互关联; 一个列表存储过程的名称,这个类在一个简单的INT格式(即130)开始的时候一个店,一个店或者"AM"或"PM",以及一个存储类为int(所以"MWF"的日子evals to 1,"TR"evals to 2,等等.我不知道是否有多个这是解决这个问题的最佳或"正确"的方法,但这些都是我所拥有的工具(自从我16岁以来没有认真编程的第一年comp sci学生).我正在编写一个函数来从每个列表中删除相应的元素,我所知道的是1)索引对应,2)用户输入课程名称.如何使用filterNot从每个列表中删除相应的元素?我认为我对每个列表都不了解,以便对它们使用更高阶的函数.
ped*_*rla 12
这是用例filter:
scala> List(1,2,3,4,5)
res0: List[Int] = List(1, 2, 3, 4, 5)
scala> res0.filter(_ != 2)
res1: List[Int] = List(1, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
您希望在转换列表的所有元素时使用map.
Lui*_*hys 11
要直接回答您的问题,我认为您正在寻找patch,例如删除索引为2的元素("c"):
List("a","b","c","d").patch(2, Nil, 1) // List(a, b, d)
Run Code Online (Sandbox Code Playgroud)
这里Nil就是我们正在与替换它,1是字符数来代替.
但是,如果你这样做:
我有四个列表,通过索引相互关联; 一个列表存储课程名称,一个存储类以简单的int格式开始的时间(即130),一个存储"am"或"pm",一个存储类的日期
你会度过一段美好的时光.我建议你用一个case class:
case class Course(name: String, time: Int, ampm: String, day: Int)
Run Code Online (Sandbox Code Playgroud)
然后将它们存储在一个Set[Course].(将时间和天数存储为Ints也不是一个好主意 - 请java.util.Calendar改为查看.)