Ben fonksiyonel programlama diline Newbie ve ben bir Üniversite projesi için Scala bunu öğreniyorum.Scala - Array Array [dize] dönüştürmek [Çift]
Bu basit gibi görünebilir, ama bu ya bunu yapmanın basit bir yolu için çevrimiçi yeterli yardım bulamıyorum - nasıl [Çift] Array [Dize] bir Array dönüştürebilirsiniz? REPL içine okunduğunda String değerleri olarak yorumlanabilen bir CSV dosyası var (her satırın bir tamsayı ve dize değerleri karışımı vardır). Bu, bir dizi Array [String] döndürecektir. Diziyi homojen hale getirmek için dizi değerlerini çift/int değerleriyle kodlamak istiyorum. Bunu yapmanın basit bir yolu var mı? Herhangi bir rehberlik çok takdir edilecektir. Şu ana kadar ne yaptın
geçerli:
[[1.0, 2.0, item1], [5, 8.9, item2],....]
Ve CSV dosyasındaki her satır dönüştürmek için:
def retrieveExamplesFromFile(fileName : String) : Array[Array[String]] = {
val items = for {
line <- Source.fromFile(fileName).getLines()
entries = line.split(",")
} yield entries
return items.toArray
}
(dize [] olarak iade) Her satırın biçimi böyledir çift dizi içine, ben sadece bir psuedo tanımı taslak var yani:
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
}
Herhangi bir fikir kabul edilir. Zaman ayırdığın için teşekkürler.
Hepiniz çevrilemeyen dizeleri 1.0 yedeği ile iki katına tüm dizeleri dönüştürmek demek
getOrElse ifadesi veya desen eşleşmesi, benim için en iyisini çalışır. Ancak, her zaman sadece 1.0'a geri dönmek yerine buna sayaç ekleyip ekleyemeyeceğimi bilmek istedim. Range'i (n1, n2) duydum ama aradığım şey değil, bir sayaç arıyorum çünkü item1 ve item2'nin farklı (belki de ardışık) sayılara sahip olmasını istiyorum. Mümkün mü? –
Elbette - "getOrElse" maddesinde istediğiniz mantığı koyabilirsiniz. Örneğin, bir yineleyici 'val fallbackIterator = Iterator.from (0)' yapabilir ve 'getOrElse (fallbackIterator.next)' işlevini kullanabilirsiniz, böylece 'getOrElse' için her bir sonraki çağrı, geri dönüş değerini artırır. –
Ben bunu deneyin monad: scala.util içinde bilmiyordum. v güzel cevap burada. – javadba