Kotlin中用lists zip处理影院座位重复预订问题求助
影院座位重复预订解决方案
核心思路
不用重复zip两个列表,直接把已预订的坐标对存在一个Set里就搞定——Set天然不允许重复元素,检查重复的效率也高。
具体实现步骤
第一步:存储已预订座位
把你用zip生成的坐标对列表转成Set<Pair<Int, Int>>,比如:// 假设xList、yList是已有的座位坐标列表,转成不可重复的集合 val bookedSeats = xList.zip(yList).toSet() // 如果需要后续新增预订,就用可变集合 val mutableBookedSeats = xList.zip(yList).toMutableSet()第二步:检查并拦截重复预订
当用户输入新的x、y坐标时,拼成Pair(x, y)直接判断是否在已预订集合里:fun bookSeat(x: Int, y: Int): Boolean { val targetSeat = Pair(x, y) return if (mutableBookedSeats.contains(targetSeat)) { println("该座位已被预订,请选择其他座位!") false } else { mutableBookedSeats.add(targetSeat) println("座位预订成功!") true } }初始数据自动去重
如果你的x、y初始列表本身就有重复坐标,转成Set的时候会自动剔除重复项:val xList = listOf(1, 2, 1) val yList = listOf(3, 4, 3) val bookedSeats = xList.zip(yList).toSet() // 最终集合里只有(1,3)、(2,4)两个坐标
为什么不用重复zip?
每次zip两个列表都会生成新的坐标对列表,完全没必要做重复操作。用Set存储已有的坐标对,直接检查新的x、y组合,既简洁又高效。
内容的提问来源于stack exchange,提问作者Nicholas Whynot
相关产品推荐
相关产品推荐

