본문 바로가기
언어/Kotlin

OBJECT, MAP 접근 코드 (# 추가하기)

by 젼젼39 2024. 4. 4.

- object 선언부분

object UserDataList {
    var userDataList = mutableListOf<Map<String, String>>()
}

 

- 기존에 저장한 데이터에 key를 통해 접근하고 데이터 추가하기

// "name"의 값이 "sample"인 맵을 userDataList에서 찾음
val newMap = UserDataList.userDataList.firstOrNull { it["name"] == "sample" }
//"name"이 "sample"인 맵 찾고 
if (newMap != null) {
    //방금 찾은 맵을 수정 가능하게 바꾸고
    val newMapMutable = newMap.toMutableMap()
    //방금 바꾼 맵에 "key"라는 키와 "value"라는 값을 추가함
    newMapMutable["key"] = "value"
    //그 뒤에 원본 userDataList에서 찾은 맵을 수정한 맵으로 교체함
    UserDataList.userDataList[UserDataList.userDataList.indexOf(newMap)] = newMapMutable
}

 

(아래는 슬랙에 보냈던 코드입니다)

object UserDataList {
    var userDataList = mutableListOf<Map<String, String>>()
}
fun main() {
    //예시 UserDataList.userDataList 1
    val objUserInfo1: MutableMap<String, String> = mutableMapOf()
    objUserInfo1["name"] = "newName"
    objUserInfo1["id"] = "newId"
    objUserInfo1["pw"] = "newPw"
    objUserInfo1["email"] = "newEmail"
    UserDataList.userDataList.add(objUserInfo1)
    //예시 UserDataList.userDataList 2
    val objUserInfo: MutableMap<String, String> = mutableMapOf()
    objUserInfo["name"] = "sample"
    objUserInfo["id"] = "newId"
    objUserInfo["pw"] = "newPw"
    objUserInfo["email"] = "newEmail"
    UserDataList.userDataList.add(objUserInfo)
    //예시 UserDataList.userDataList 3
    val objUserInfo3: MutableMap<String, String> = mutableMapOf()
    objUserInfo3["name"] = "newName"
    objUserInfo3["id"] = "newId"
    objUserInfo3["pw"] = "newPw"
    objUserInfo3["email"] = "newEmail3"
    UserDataList.userDataList.add(objUserInfo3)
    // "name"의 값이 "sample"인 맵에 "key"라는 키로 "value"라는 값을 추가한 부분
    val newMap = UserDataList.userDataList.firstOrNull { it["name"] == "sample" }
    if (newMap != null) {
        val newMapMutable = newMap.toMutableMap()
        newMapMutable["key"] = "value"
        UserDataList.userDataList[UserDataList.userDataList.indexOf(newMap)] = newMapMutable
    }
    // UserDataList 내용 확인하기 위한 출력부분
    for (userInfo in UserDataList.userDataList) {
        for ((key, value) in userInfo) {
            println("$key: $value")
        }
        println()
    }
}

 

- key로 value 받아와서 사용하기

val mapWithNameSample = UserDataList.userDataList.firstOrNull { it["name"] == "sample" }

if (mapWithNameSample != null) {
    val idValue = mapWithNameSample["id"]
    val pwValue = mapWithNameSample["pw"]
    
    println("ID: $idValue, PW: $pwValue")
} else {
    println("No user with the name 'sample' found.")
}

- intent로 받아온 경우

//intent로 "name"에 해당하는 value를 받아온 경우
val nameIntent = intent.getStringExtra("name")!!
val btn_click = findViewById<Button>(R.id.btn_change)
btn_click.setOnClickListener {
    objSearch(nameIntent)
}

 - 이미지 추가

fun objSearch(nameIntent: String) {

    // (이전과 동일하게 진행) "name"의 값이 "sample"인 맵을 찾은 다음에
    val targetMap = UserDataList.userDataList.firstOrNull { it["name"] == nameIntent }

    //해당하는 맵을 찾았을 경우에 다른 키 값들을 가져와 변수에 저장하고
    if (targetMap != null) {
        val icon = targetMap["image"]?.toInt()
        val id = targetMap["id"]
        val pw = targetMap["pw"]
        val email = targetMap["email"]

        image.setImageResource(icon!!)
        tv1.setText(id)
        tv2.setText(pw)
        tv3.setText(email)


    } else { //여긴 못찾은경우
        println("User with name 'sample' not found")
    }
}

 


 - 저장한 내용들 반복문으로 돌기 (방법 1)

UserDataList.userDataList.forEach { user ->
    //user 로 하나씩 받아옴. for문 같은거
    //받아온 user에서 키로 value 찾아 저장함
    var objID = user["id"]
    var objPW = user["pw"]

    if (objID == idText) {
        if (objPW == pwText) {
            //받아온 아이디와 비번이 입력한것과 일치할경우 실행할 부분
            Toast.makeText(this, getString(R.string.login_ok), Toast.LENGTH_SHORT).show()
        } else {
        }
    } else {
    }
}

 - 저장한 내용들 반복문으로 돌기 (방법 2)

for (user in UserDataList.userDataList) {
    var objID = user["id"]
    var objPW = user["pw"]

    if (objID == idText) {
        if (objPW == pwText) {
            Toast.makeText(this, getString(R.string.login_ok), Toast.LENGTH_SHORT).show()
        } else {
            // 비밀번호가 일치하지 않는 경우
        }
    } else {
        // 아이디가 일치하지 않는 경우
    }
}