如何通过删除Scala中的一个元素从列表中获取所有子列表?

时间:2012-05-15 15:12:44

标签: scala

我有一个列表List(1,2,3,4),并希望通过删除一个元素来获取所有子列表:

List(2,3,4)
List(1,3,4)
List(1,2,4)
List(1,2,3)

最简单的方法是什么?

3 个答案:

答案 0 :(得分:3)

如果您的意思是“将每个位置留在列表中”,那么:

val x = List(1,2,3,2)

x.indices.map(i => x.take(i) ++ x.drop(i+1))
// List(2, 3, 2)      // skipped index 0
// List(1, 3, 2)      // skipped index 1
// List(1, 2, 2)      // skipped index 2
// List(1, 2, 3)      // skipped index 3

如果您的意思是“将每个唯一元素留在列表中”,那么:

x.distinct.map(e => x.filter(_ != e))
// List(2, 3, 2)      // filtered out 1s
// List(1, 3)         // filtered out 2s
// List(1, 2, 2)      // filtered out 3s

答案 1 :(得分:2)

List(1, 2, 3, 4).combinations(3).toList

或者,更一般地说,

list.combinations(list.size - 1) // use the Iterator -- combinations can be huge in size

答案 2 :(得分:0)

我明白了:

val x = List(1,2,3,4)
x.map(i => sizes - i)