[英]Kotlin - How do I substitute a String with elements of Mutable List of Pairs?
我正在研究單字母密碼,我必須通過用任何其他字母代替它來加密消息。
fun encrypt(message:String){
//Assume message as ABCD
var encrypt:String = ""
val alphabets = ('A'..'Z').toMutableList() //['A','B','C','D',....]
var shuffAlp = alphabets.shuffled() // Assume shuffled op as ['D','L','N','J',....]
var pair = alphabets.zip(shuffAlp)
println(pair) // Assume pair as [(A, D), (B, L), (C, N), (D, J), ...] acc to shuffled op
for(m in message){
for (p in pair){
if(p.first == m)
encrypt+=p.second
}
}
println(encrypt) //DLNJ according to given pair
}
如您所見,我使用了兩個 for 循環來生成我的加密字符串。 我想知道是否有等效的 Lambda function 或會丟棄兩個循環的擴展?
壓縮后,使用toMap
這樣您就可以輕松查找加密值而無需循環。
您正在使用var
s,其中您的變量可以是常量val
s,而MutableList
作為不必要的中間步驟。
// Assumes message contains only capital letters
fun encrypt (message: String): String {
val alphabet = 'A'..'Z'
val cipher = alphabet.zip(alphabet.shuffled()).toMap()
return message.map { cipher[it] }.joinToString("")
}
但是,如果您想要稍后可以解密的消息,則需要單獨的函數,以便您可以存儲密碼並重復使用它。 像這樣的東西:
fun createCipher(): Map<Char, Char> {
val alphabet = 'A'..'Z'
return alphabet.zip(alphabet.shuffled()).toMap()
}
fun encrypt(message: String, cipher: Map<Char, Char>): String {
return message.map { cipher[it] }.joinToString("")
}
fun decrypt(encrpytedMessage: String, cipher: Map<Char, Char>): String {
val invertedCipher = cipher.entries.associate { it.value to it.key }
return encrpytedMessage.map { invertedCipher [it] }.joinToString("")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.