Tôi là người mới đến ngôn ngữ lập trình hàm và tôi đang học nó ở Scala cho một dự án đại học. Điều này có vẻ đơn giản, nhưng tôi không thể tìm thấy đủ trợ giúp trực tuyến cho việc này hay cách đơn giản để làm điều này - làm cách nào tôi có thể chuyển đổi một mảng [String] thành mảng [Double]? Tôi có một tập tin CSV, khi đọc vào REPL được hiểu là giá trị chuỗi (mỗi dòng của tập tin có một kết hợp của các giá trị số nguyên và chuỗi) mà sẽ trả về một loại Array [String]. Tôi muốn mã hóa các giá trị chuỗi với giá trị double/int để trả về mảng [Double] để làm cho mảng đồng nhất. Có cách nào đơn giản để làm việc này không? Mọi hướng dẫn sẽ được đánh giá cao.Scala - chuyển đổi mảng [String] thành mảng [Double]
Những gì tôi đã làm cho đến bây giờ là:
def retrieveExamplesFromFile(fileName : String) : Array[Array[String]] = {
val items = for {
line <- Source.fromFile(fileName).getLines()
entries = line.split(",")
} yield entries
return items.toArray
}
Định dạng của mỗi dòng (trở lại như String []) là như vậy:
[[1.0, 2.0, item1], [5, 8.9, item2],....]
Và để chuyển đổi mỗi dòng trong file CSV thành mảng kép, tôi chỉ có một định nghĩa psuedo được soạn thảo như vậy:
def generateNumbersForStringValues(values : Array[String]) : Array[Double] = {
val line = for(item <- values)
{
//correct way?
item.replace("item1", "1.0")
item.replace("item2", "1.0")
}
return //unable to typecast/convert
}
Bất kỳ ý tưởng nào đều được chào đón. Cảm ơn bạn đã dành thời gian.
Câu lệnh getOrElse hoặc đối sánh mẫu phù hợp nhất với tôi. Tuy nhiên, tôi muốn biết nếu tôi có thể thêm truy cập vào điều này thay vì quay trở lại chỉ 1.0 tất cả các thời gian? Tôi đã nghe nói về Range (n1, n2) nhưng đó không phải là những gì tôi đang tìm kiếm, tôi đang tìm kiếm một truy cập bởi vì tôi muốn item1 và item2 có số khác nhau (có thể liên tiếp). Điều này có thể không? –
Chắc chắn - bạn có thể đặt bất kỳ logic nào bạn muốn trong mệnh đề 'getOrElse'. Ví dụ, bạn có thể tạo một biến lặp 'val fallbackIterator = Iterator.from (0)', và sau đó sử dụng 'getOrElse (fallbackIterator.next)', để mỗi cuộc gọi liên tiếp tới 'getOrElse' sẽ tăng giá trị dự phòng. –
Tôi đã tìm kiếm rằng thử monad: không biết trong scala.util. v câu trả lời khá ở đây. – javadba