1

我有一个带有一些字符的 ArrayList 和另一个带有一些数字的数组。我想通过加入他们来创建一个新的 ArrayList。

val mList = arrayListOf(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"
)

val aList = arrayListOf(
    "1", "2", "3", "4", "5"
)

合并后我想要下面的输出

["a", "1"], ["b", "2"], ["c", "3"], ["d", "4"], ["e", "5"], ["f", "1"], ["g", "2"], ["h", "3"], ["i", "4"], ["j", "5"], [“k”,“1”]

请帮忙

4

3 回答 3

0

在这种情况下,您会发现forEachIndexed(action: (index: Int, T) -> Unit): Unit模数运算符 ( %) 的使用很好。你可以这样做:

val mList = arrayListOf(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"
)

val aList = arrayListOf(
    "1", "2", "3", "4", "5"
)

fun main() {
    val arrayList = arrayListOf<ArrayList<String>>()
    mList.forEachIndexed { index, s -> arrayList.add(arrayListOf(s, aList[index % aList.size])) }
    println(arrayList) // [[a, 1], [b, 2], [c, 3], [d, 4], [e, 5], [f, 1], [g, 2], [h, 3], [i, 4], [j, 5], [k, 1]]
}
于 2019-10-16T05:33:33.413 回答
0

只有当第一个列表更大时,接受的答案才会起作用。

与大小无关的另一种方法是在两个列表上使用模数:

val mList = arrayListOf(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"
)

val aList = arrayListOf(
    "1", "2", "3", "4", "5"
)

fun main() {
    val combinedList: List<Pair<String, String>> = 
        (0 until max(mList.size, aList.size)) // generate indices
            .map { index -> mList[index % mList.size] to aList[index % aList.size] } // convert indices to actual pairs

    // use the combined-list like this:
    val pair = combined[0]
    println(pair.first) // "a"
    println(pair.second) // "1"

    // or this:
    combined.forEach {
        println("${it.first}, ${it.second}")
    }    

    // if you want a mutable list (for adding\removing pairs yourslef), you can type:
    val mutableCombinedList: MutableList<Pair<String, String>> = combinedList.toMutableList()
    // and then you can add\remove pairs:
    mutableCombinedList += ("r" to "99")
    mutableCombinedList -= ("a" to "1")
}
于 2019-10-16T09:52:40.090 回答
0

为了完整起见,另一个选项是使用mapIndexed函数:

val combined = mList.mapIndexed { index, value -> value to aList[index % aList.size] }
println(combined) 
// output: [(a, 1), (b, 2), (c, 3), (d, 4), (e, 5), (f, 1), (g, 2), (h, 3), (i, 4), (j, 5), (k, 1)]
于 2019-10-16T23:23:02.673 回答