2010-12-19 28 views
8

我在將C++數據結構轉換爲Scala時遇到問題。 Scala與C++非常不同,但我喜歡它。 我在C++下面的代碼片段:來自C++程序員的Scala問題(結構和stl)

struct Output 
{ 
    double point; 
    double solution[6]; 
}; 

struct Coeff 
{ 
    double rcont1[6]; 
    double rcont2[6]; 
    double rcont3[6]; 
    double rcont4[6]; 
    double rcont5[6]; 
    double rcont6[6]; 
}; 
std::list<Output> output; 
std::list<Coeff> coeff; 

我現在和數據

while(n<nmax) { 
    if step successfull 
     Output out; 
     out.point = some values; 
     out.solution[0] = some value; 
     output.push_back(out); 
} 

我試圖在Scala中創建一個簡單的類來保存數據填寫while循環列表。

class Output 
{ 
    var point: Double 
    var solution: Array[Double] = new Array(6) 
} 

但是由於點沒有被初始化,所以這不起作用。有沒有解決的辦法?我只想定義變量但不初始化它。

另一件快事。我正在尋找一個相當於stl :: lower_bound。

找到正確的位置來插入排序的容器中的元素來維護順序。

感謝您的幫助Scala的初學者

+0

我不認爲你會發現一個直接相當於'std :: lower_bound '。你認爲你需要什麼? – 2010-12-19 15:50:31

+0

'Seq.indexWhere'可能是一種可能性。 – Debilski 2010-12-19 19:39:11

+0

我有一個List val list = List(1.0,2.0,3.0,4.0),它們表示間隔。我現在有一個2.5的例子,需要知道它在什麼時間間隔(介於2.0和3.0之間)。感謝indexWhere我會嘗試一下。 – Radfahrer 2010-12-19 22:11:20

回答

3

我剛剛找到了答案intialistion:

class Output 
{ 
    var point: Double = _ 
    var solution: Array[Double] = Array(6) 
} 

PUH Scala有很多syntx的習慣:-)

任何人有低等價物的解決方案?

3

很難有效地翻譯,因爲你已經留下了很多隱藏在背後的僞代碼未知數,但我主張沿着這些路線的東西:

// type alias 
type Coeff = Seq[Seq[Double]] 

// parameters passed to a case class become member fields 
case class Output (point: Double, solution: Seq[Double]) 

val outputs = (0 to nmax) map { n => 
    Output(generatePoint(n), generateSolution(n)) 
} 

如果你能充實你的示例代碼更全面的一點,我將能夠提供更好的翻譯。

+0

這看起來很有趣(我對函數式編程還是一個新東西)。這裏是完整的C++代碼:http://paste.pocoo.org/show/307014/。有趣的部分是表格線224-251 – Radfahrer 2010-12-19 17:15:51

4

爲什麼你不想初始化它?爲了效率?恐怕JVM不會讓你隨意在你的變量中產生隨機垃圾。因此,既然你必須初始化它,爲什麼不指定你的「未初始化」值呢?

class Output { 
    var point = 0.0 
    var solution = new Array[Double](6) 
} 

(你可以使用Double.NaN和檢查point.isNaN如果以後需要看價值是否已被初始化。)

您可以使用_作爲默認初始化,但除非你使用它在泛型代碼:

class Holder[T] { 
    var held: T = _ 
} 

然後你只是模糊了真正的價值將設置。 (或者你宣佈「我真的不在乎這裏發生了什麼,它可能是任何東西」 - 這可能是有用的。)

+0

以及大多數習慣:-)感謝您的選擇。我喜歡NaN,允許檢查它是否被初始化 – Radfahrer 2010-12-19 17:23:01