Bah*_*duk 6 java android kotlin kotlin-android-extensions
我想合并两个不同长度的列表。例如;
val list1 = listOf(1,2,3,4,5)
val list2 = listOf("a","b","c")
Run Code Online (Sandbox Code Playgroud)
我想要这样的结果
(1,"a",2,"b",3,"c",4,5)
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
您可以.zip为此使用该功能
list1.zip(list2){ a,b -> listOf(a,b)}.flatten()
Run Code Online (Sandbox Code Playgroud)
唯一的问题是它只会处理两个集合的元素,所以如果(就像在例子中一样)让我们有不同的大小 - 它不会工作
另一种方法是添加特定标记并过滤它们,或者仅使用迭代器。我找到了一个具有sequence{..}功能的优雅解决方案
val result = sequence {
val first = list1.iterator()
val second = list2.iterator()
while (first.hasNext() && second.hasNext()) {
yield(first.next())
yield(second.next())
}
yieldAll(first)
yieldAll(second)
}.toList()
Run Code Online (Sandbox Code Playgroud)
>>> list1 + list2
res12: kotlin.collections.List<kotlin.Any> = [1, 2, 3, 4, 5, a, b, c]
Run Code Online (Sandbox Code Playgroud)
>>> list1.zip(list2).flatMap { listOf(it.first, it.second) } + list1.drop(list2.size)
res16: kotlin.collections.List<kotlin.Any> = [1, a, 2, b, 3, c, 4, 5]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5553 次 |
| 最近记录: |