"82389235"
のように見えるString
の整数がありますが、それを反復処理して各数値をMutableList
に個別に追加したかったのです。しかし、私がそれを扱うとき、私がそれを扱う方法だと思うとき:
var text = "82389235"
for (num in text) numbers.add(num.toInt())
これにより、文字列とはまったく関係のない数字がリストに追加されます。それでも、println
を使用してコンソールに出力すると、文字列を完全に繰り返し処理します。
Char
をInt
に適切に変換するにはどうすればよいですか?
これは、num
がChar
であるためです。つまり、結果の値はそのcharのASCII値です。
これはトリックを行います:
val txt = "82389235"
val numbers = txt.map { it.toString().toInt() }
map
はさらに簡略化できます。
map(Character::getNumericValue)
JVMでは、効率的な Java.lang.Character.getNumericValue() が利用可能です。
val numbers: List<Int> = "82389235".map(Character::getNumericValue)
変数num
はChar
型です。これでtoInt()
を呼び出すと、ASCIIコードが返されます。これがリストに追加されます。
数値を追加する場合は、各桁からASCII 0のコードを引くだけです。
_numbers.add(num.toInt() - '0'.toInt())
_
これは次のように少しいいです:
_val zeroAscii = '0'.toInt()
for(num in text) {
numbers.add(num.toInt() - zeroAscii)
}
_
これはmap
操作でも機能するため、MutableList
を作成する必要はまったくありません。
_val zeroAscii = '0'.toInt()
val numbers = text.map { it.toInt() - zeroAscii }
_
または、String.toInt()
が実際に数値を解析するため、各文字を個別にString
に変換することもできます。これは、作成されるオブジェクトの観点からは少し無駄です
_numbers.add(num.toString().toInt())
_