我有一个数据结构,其中包含一组任务的工作。Job和Task数据都在这样的文件中定义:
jobs.txt:
JA
JB
JC
tasks.txt:
JB T2
JA T1
JC T1
JA T3
JA T2
JB T1
创建对象的过程如下:
- 读取每个作业,创建它并通过id进行存储
- 读取任务,通过id检索作业,创建任务,并将任务存储在该作业中
一旦文件被读取,此数据结构就不再被修改。因此,我希望作业中的任务可以存储在不可变集合中。但是我不知道如何以高效的方式实现它。(注意:存储作业的不可变映射可以保持不变)
以下是代码的简化版本:
class Task(val id: String)
class Job(val id: String) {
val tasks = collection.mutable.Set[Task]() // This sholud be immutable
}
val jobs = collection.mutable.Map[String, Job]() // This is ok to be mutable
// read jobs
for (line <- io.Source.fromFile("jobs.txt").getLines) {
val job = new Job(line.trim)
jobs += (job.id -> job)
}
// read tasks
for (line <- io.Source.fromFile("tasks.txt").getLines) {
val tokens = line.split("\t")
val job = jobs(tokens(0).trim)
val task = new Task(job.id + "." + tokens(1).trim)
job.tasks += task
}
感谢您提前给出的每个建议!
addTask
方法,它返回一个具有相同数据加上新任务的新Job
。这会稍微改变一下逻辑,因为目前Job
好像了解自己初始化的太多了。 :-) - Daniel C. SobraladdTask
会更好。有很多地方可以争论(它应该采用Option[Job]
,还是作为可变映射的闭包?)。 - Rex KerrJobUnderConstruction
类继承自Job
,它有一个额外的可变属性taskAccumulator
,并且有一个toJob
方法,在最后返回一个Job
对象。 - Rex Kerr