Di Scala, Anda sering menggunakan iterator untuk melakukan for
perulangan dalam urutan yang meningkat seperti:
for(i <- 1 to 10){ code }
Bagaimana Anda melakukannya sehingga berubah dari 10 menjadi 1? Saya kira 10 to 1
memberikan iterator kosong (seperti matematika kisaran biasa)?
Saya membuat skrip Scala yang menyelesaikannya dengan memanggil terbalik pada iterator, tetapi itu tidak baik menurut saya, apakah berikut ini cara yang harus dilakukan?
def nBeers(n:Int) = n match {
case 0 => ("No more bottles of beer on the wall, no more bottles of beer." +
"\nGo to the store and buy some more, " +
"99 bottles of beer on the wall.\n")
case _ => (n + " bottles of beer on the wall, " + n +
" bottles of beer.\n" +
"Take one down and pass it around, " +
(if((n-1)==0)
"no more"
else
(n-1)) +
" bottles of beer on the wall.\n")
}
for(b <- (0 to 99).reverse)
println(nBeers(b))
until
yang dapat Anda gunakan sebagai penggantito
untuk mengecualikan titik akhir kanan dari jangkauan. Titik akhir sisi kiri selalu disertakan.Range.inclusive(10, 1, -1)
pantas disebutkan.Jawaban dari @Randall bagus sekali, tapi demi penyelesaian saya ingin menambahkan beberapa variasi:
sumber
by
dan IMO tidak boleh digunakan dalam keadaan apa punScala menyediakan banyak cara untuk bekerja secara berurutan.
Solusi Pertama: dengan "to" dan "by"
Solusi Kedua: Dengan "ke" dan "mundur"
Solusi ke-3: hanya dengan "ke"
sumber
Setelah diprogram dalam Pascal, saya merasa definisi ini bagus untuk digunakan:
Digunakan dengan cara ini:
sumber
Error:(57, 17) value class may not be a member of another class implicit class RichInt(val value: Int) extends AnyVal { ^
extends AnyVal
bagiannya (yang hanya berfungsi untuk menghilangkan beberapa overhead).Anda dapat menggunakan kelas Range:
sumber
Kamu bisa memakai :
for (i <- 0 to 10 reverse) println(i)
sumber
Perulangan akan dijalankan hingga nilai == 0, setiap kali dikurangi -1.
sumber