我希望能够删除所有重复项(如果它们位于数组中的连续位置)。例如,我有这个数组:
[1,2,2,3,2,5,1,1,6,1]
Run Code Online (Sandbox Code Playgroud)
现在,我想删除所有位于相同位置的重复项。最后,删除元素后,最终的数组将如下所示:
[1,2,3,2,5,1,6,1]
Run Code Online (Sandbox Code Playgroud)
显然,我们可以看到,如果它位于下一个位置,我们就会将其删除。
注意:我不希望只使用整数。我希望它适用于所有对象。另外,我不想删除所有重复项。仅当其处于以下位置时才将其拆下。
理想情况下,我想就地执行此操作,而不是创建新数组。
val list = listOf(1, 2, 2, 3, 2, 5, 1, 1, 6, 1)
val result = list.filterIndexed { index, i ->
if (index > 0) i != list[index - 1] else true
// or: if (index < list.size - 1) i != list[index + 1] else true
}
println(result)
Run Code Online (Sandbox Code Playgroud)
编辑,对于标量类型和数据类:
fun <T : Any> List<T>.filterConsecutiveDuplicates() =
filterIndexed { index, i -> if (index < size - 1) i != this[index + 1] else true }
val list = listOf(1, 2, 2, 3, 2, 5, 1, 1, 6, 1)
val list2 = list.filterConsecutiveDuplicates()
data class O(val name: String)
val objects = listOf(O("A"), O("A"), O("B"), O("A"), O("B"), O("C"), O("C"), O("A"))
val objects2 = objects.filterConsecutiveDuplicates()
Run Code Online (Sandbox Code Playgroud)