2012-03-22 67 views
0

我想使用indides刪除Jagged數組的項目。使用索引刪除Jagged數組中的項目

int[] toRemove; (e.g, {0, 1}) 

int[][] MainArray (e.g. { [0] {...}, [1] {...}, [2] {...}} 

預期結果

int[][] result (e.g. {[2] {...}} 

MainArray如何刪除其具有與的文檔,刪除列表索引中的項目?

有沒有一種使用LINQ的有效方法?

+1

的LINQ是一個查詢工具,它不直接刪除的項目(儘管你可以查詢一個子集,併爲它分配回到原來的) – 2012-03-22 13:59:56

+0

你不能從一個數組,你知道你會得到一個刪除新陣列?這是否必須再次成爲一個數組? – 2012-03-22 14:13:22

回答

3

希望這給了預期的結果:

var notInToRemove = MainArray 
    .Where((arr ,index) => !toRemove.Contains(index)).ToArray(); 
+0

現在我知道爲什麼Where方法有int指數參數超載;-) – gprasant 2012-03-22 14:15:48

+1

謝謝蒂姆。大力支持。按預期工作並按我的需要工作。 LINQ是如此的優雅,但是很難學:-(順便說一下,我也在亞琛學習過,很高興認識你 – Suresh 2012-03-22 14:18:43

+0

@Suresh:...我仍然在這裏生活和工作,我很高興聽到它的工作:) LINQ一開始很難,因爲它壓縮複雜性,你經常需要橫向思考。但結果幾乎總是更容易理解。記住Corect的結果,然後開始編寫查詢,反之亦然。 – 2012-03-22 14:35:53

0

你可以使用ElementAt的方法而不是刪除方法,如果你想要的是,是不是在那裏的文檔,刪除集中的數據。

int[] toRemove = {0,1}; 
int[][] mainArray = new int[3][]; 
mainArray[0] = new int[]{0,0,0}; 
mainArray[1] = new int[]{1,1,1}; 
mainArray[2] = new int[]{2,2,2}; 

var result = mainArray.ElementAt(2); // This value 2 is found as all indexes of mainArray except the values in toRemove 
//(Code would look like this : 
Enumerable.Range(0, mainArray.Length).Except(toRemove);