2015-12-03 54 views
0

我有一個List,即[0.1, 0.3, 0.8, 0.3, 0.4, 0.7, 0.9, 0.5]。我怎樣才能做通過給出從原始列表中刪除的索引列表,即[0, 4, 2, 7, 8]?。給出一系列索引刪除列表項目

List(T).RemoveRange不能在我的情況下工作,因爲它被定義爲

public void RemoveRange(int index, int count) 

此外,我不希望使用for循環和反覆檢查的列表。有沒有其他方法?

+0

這些指數是否有共同點? –

+0

不是真的......只是列表 Nostradamus

+2

爲什麼沒有for循環,你有什麼嘗試?無論如何,請參閱[在給定索引處刪除列表元素](http://stackoverflow.com/questions/9908564/how-to-remove-from-a-list-some-items-c-sharp)。 – CodeCaster

回答

4

您可以使用LINQ的Enumerable.Where保留所有不在索引列表:

list = list.Where((d, index) => !indices.Contains(index)).ToList(); 

另一個「那麼優雅」的方法是使用一個向後循環和List.RemoveAt

indices.Sort(); 
for (int i = indices.Count - 1; i >= 0; i--) 
    list.RemoveAt(indices[i]); 
+1

@CodeCaster:現在更好,我的第一種方法是向後循環整個集合而不是僅索引列表。 –