集合相关

关于集合的部分工具,具体表现为以下顶级或扩展函数:

/**
 * 获取列表中特定范围内的元素
 *
 * @param list 列表
 * @param start 开始位置
 * @param end 结束位置(默认为元素数量)
 */
fun <T> subList(list: List<T>, start: Int = 0, end: Int = list.size): List<T>

/**
 * 获取 Map 中特定范围内的元素
 *
 * @param map Map
 * @param start 开始位置
 * @param end 结束位置(默认为元素数量)
 */
fun <K, V> subMap(map: Map<K, V>, start: Int = 0, end: Int = map.size - 1): List<Map.Entry<K, V>>

/**
 * 安全的写入元素
 *
 * @param index 下标
 * @param element 元素
 * @param def 若写入位置之前存在空缺,则写入该默认值
 */
fun <T> MutableList<T>.setSafely(index: Int, element: T, def: T)

/**
 * 安全的插入元素
 *
 * @param index 下标
 * @param element 元素
 * @param def 若插入位置之前存在空缺,则写入该默认值
 */
fun <T> MutableList<T>.addSafely(index: Int, element: T, def: T)

/**
 * 遍历一个集合
 * 可以在遍历的过程中使用 close() 方法结束遍历,以弥补 Kotlin 无法使用 break 的设计
 *
 * @param start 开始位置(可省略)
 * @param end 结束位置(可省略)
 * @param reversed 是否逆向
 * @param action 方法体
 * @return 最后一次方法体执行结果
 */
fun <T, C : Iterable<T>, R> C.each(start: Int = -1, end: Int = -1, reversed: Boolean = false, action: Closeable.(index: Int, T) -> R?): R?