2012-03-22 1 views
0

Я хочу удалить элементы массива Jagged с помощью индексов.Удаление элементов в массиве Jagged с использованием индекса

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

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

Ожидаемый результат

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

От MainArray как удалить элементы, которые, имеющие индексы от toRemove списке?

Есть ли эффективный способ использования LINQ?

+1

Linq является средство запроса, он не сразу удалять элементы (хотя вы можете запросить подмножество и назначить его обратно к оригиналу) –

+0

Вы не можете удалить из массива, вы понимаете, вы получите новый массив? И это снова должно быть массивом? –

ответ

3

Надеемся, что это дает ожидаемый результат:

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

Теперь я знаю, почему там, где метод имеет перегрузку с индексом int parmeter ;-) – gprasant

+1

Спасибо Тим. Отличная поддержка. Работает так, как ожидалось и по мере необходимости. LINQ настолько изящна, но усердно учится :-(Кстати, я также учился в Аахене. Приятно познакомиться с вами. – Suresh

+0

@ Суреш: ... и я все еще живу и работаю здесь, я рад слышать что он работает :) LINQ трудно в начале, потому что он сжимает сложность, и вам часто нужно думать вбок. Но результат почти всегда более понятен. Найдите путь к результату corect, а затем начните писать запрос, а не наоборот. –

0

Вы можете использовать метод ElementAt вместо метода Remove, если все, что вы хотите, это данные, которые не быть там в наборе toRemove.

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); 

 Смежные вопросы

  • Нет связанных вопросов^_^