Tôi có cấu trúc dữ liệu được thực hiện bởi mỗi công việc chứa một tập hợp các tác vụ. Cả hai công việc và nhiệm vụ dữ liệu được định nghĩa trong các tập tin như thế này:cách đọc cấu trúc dữ liệu bất biến từ tệp trong scala
jobs.txt:
JA
JB
JC
tasks.txt:
JB T2
JA T1
JC T1
JA T3
JA T2
JB T1
Quá trình tạo các đối tượng như sau:
- đọc từng công việc, tạo ra nó và lưu trữ nó bằng id
- đọc nhiệm vụ, lấy công việc theo id, tạo tác vụ, lưu trữ tác vụ trong công việc
Khi tệp được đọc cấu trúc dữ liệu này không bao giờ được sửa đổi. Vì vậy, tôi muốn các nhiệm vụ đó trong công việc sẽ được lưu trữ trong một tập hợp bất biến. Nhưng tôi không biết làm thế nào để làm điều đó một cách hiệu quả. (Lưu ý: bản đồ bất biến lưu trữ công việc có thể để bất biến)
Đây là một phiên bản đơn giản của các mã:
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
}
Cảm ơn trước cho mỗi gợi ý!
Tôi thích cách tiếp cận này. Nhưng tôi chỉ viết một phương thức 'addTask' trả về một' Job' mới với cùng dữ liệu, cộng với nhiệm vụ mới. Nó sẽ thay đổi logic một chút, nhưng, vì nó là, 'Công việc' dường như biết quá nhiều về cách nó sẽ được khởi tạo. :-) –
Tôi đã làm theo cách này để làm nổi bật việc thay thế công việc cũ bằng một công việc mới, dường như tôi là khái niệm then chốt ở đây. Nhưng tôi đồng ý rằng một 'addTask' ở đâu đó sẽ tốt hơn. Có rất nhiều nơi mà người ta có thể tranh luận (nên lấy một 'Lựa chọn [Công việc]', hoặc là một đóng cửa quanh bản đồ có thể thay đổi được?). –
Cảm ơn, tôi thích giải pháp này cho ý tưởng của công việc tạo công việc mới (bằng cách xây dựng hoặc phương pháp addTask). Tôi vẫn còn rất mới để scala (Tôi đến từ java) và tôi không chắc chắn nếu, trong một trường hợp như thế này, bất biến là giá trị của việc có nhiều sáng tạo đối tượng kể từ khi tôi thực hiện là khá quan trọng (trong trường hợp thực sự tôi có nhiều hơn 2 lớp, với các liên kết phức tạp giữa chúng và hàng nghìn đối tượng). –