跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kotlin三元组(Triple)
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Note|本文介绍的是Kotlin标准库中的三元组(Triple)数据结构,而非条件运算符(Kotlin使用`if`表达式替代三元运算符)。}} = Kotlin三元组(Triple) = '''Kotlin三元组(Triple)'''是标准库提供的用于存储三个任意类型值的通用数据类,属于Kotlin的[[元组(Tuple)]]概念实现之一。它允许将三个独立的值作为单一逻辑单元传递,常用于需要临时组合数据的场景。 == 基本特性 == * '''不可变性''':一旦创建,三个元素的值不可修改(类似于`val`声明) * '''类型安全''':支持泛型,三个元素可以是不同类型 * '''解构声明''':支持直接将元素解构到独立变量 * 实现原理:通过`data class`实现,自动生成`equals()`、`hashCode()`和`toString()` 数学表示:<math>Triple<T1, T2, T3> = (first: T1, second: T2, third: T3)</math> == 创建与访问 == === 基础用法 === <syntaxhighlight lang="kotlin"> // 创建三元组 val userData = Triple("Alice", 28, false) // 访问元素(三种方式) println(userData.first) // 输出: Alice println(userData.second) // 输出: 28 println(userData.third) // 输出: false // 类型推断示例 val coordinates = Triple(12.5, 4.8, -3.2) // Triple<Double, Double, Double> </syntaxhighlight> === 解构声明 === <syntaxhighlight lang="kotlin"> val (name, age, isPremium) = userData println("$name (${age}岁) ${if(isPremium) "VIP" else "普通用户"}") // 输出: Alice (28岁) 普通用户 </syntaxhighlight> == 类型参数 == 三元组支持完整的泛型参数: <syntaxhighlight lang="kotlin"> fun <A, B, C> createTriple(a: A, b: B, c: C): Triple<A, B, C> = Triple(a, b, c) val mixedTriple = createTriple("Text", 42, listOf(1, 2, 3)) // 类型为 Triple<String, Int, List<Int>> </syntaxhighlight> == 实际应用案例 == === 案例1:函数多返回值 === <syntaxhighlight lang="kotlin"> fun parseDate(input: String): Triple<Int, Int, Int> { val parts = input.split("-") return Triple(parts[0].toInt(), parts[1].toInt(), parts[2].toInt()) } val (year, month, day) = parseDate("2023-11-15") </syntaxhighlight> === 案例2:图形坐标处理 === <mermaid> graph TD A[3D点坐标] --> B(Triple<x,y,z>) B --> C[平移变换] C --> D[新Triple<x',y',z'>] </mermaid> <syntaxhighlight lang="kotlin"> fun translatePoint( point: Triple<Double, Double, Double>, dx: Double, dy: Double, dz: Double ): Triple<Double, Double, Double> { return Triple(point.first + dx, point.second + dy, point.third + dz) } </syntaxhighlight> === 案例3:数据库查询结果 === <syntaxhighlight lang="kotlin"> // 模拟数据库行记录 fun getUserRow(id: Int): Triple<String, String, Int> { // 实际中可能来自数据库查询 return when(id) { 1 -> Triple("user1", "user1@example.com", 150) 2 -> Triple("user2", "user2@example.com", 210) else -> Triple("guest", "no-email", 0) } } </syntaxhighlight> == 与Pair的比较 == {| class="wikitable" |- ! 特性 !! Triple !! Pair |- | 元素数量 || 3 || 2 |- | 适用场景 || 需要三个关联值 || 需要两个关联值 |- | 解构变量 || `(first, second, third)` || `(first, second)` |- | 替代方案 || 数据类 || 数据类/Map.Entry |} == 高级用法 == === 集合操作 === <syntaxhighlight lang="kotlin"> val points = listOf( Triple(1, 2, 3), Triple(4, 5, 6), Triple(7, 8, 9) ) // 计算所有点的z坐标和 val sumZ = points.sumOf { it.third } // 输出: 18 </syntaxhighlight> === 作为Map的键 === 需确保所有组件类型实现了`hashCode()`: <syntaxhighlight lang="kotlin"> val cache = mutableMapOf<Triple<String, Int, String>, BigDecimal>() cache[Triple("USD", 30, "buy")] = BigDecimal("123.45") </syntaxhighlight> == 限制与替代方案 == 当需要更多元素或更复杂结构时,建议使用数据类: <syntaxhighlight lang="kotlin"> // 替代Triple的推荐方式 data class UserProfile( val name: String, val age: Int, val isVerified: Boolean ) </syntaxhighlight> '''选择依据''': * 需要语义化字段名时 * 元素数量超过3个时 * 需要添加自定义方法时 == 最佳实践 == 1. 优先为业务逻辑创建明确的数据类 2. 临时性数据组合可使用Triple 3. 避免深度嵌套(如`Triple<Triple<...>, ...>`) 4. 公共API考虑使用命名参数增强可读性 {{Warning|在Android开发中,Parcelable数据不建议使用Triple,应实现明确的数据类。}} == 参见 == * [[Kotlin数据类]] * [[Kotlin集合操作]] * [[Kotlin泛型]] [[Category:编程语言]] [[Category:Kotlin]] [[Category:Kotlin数据结构]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Mbox
(
编辑
)
模板:Note
(
编辑
)
模板:Warning
(
编辑
)
模块:Arguments
(
编辑
)
模块:Message box
(
编辑
)
模块:Message box/ambox.css
(
编辑
)
模块:Message box/configuration
(
编辑
)
模块:Yesno
(
编辑
)