2017-07-16 102 views
0

我有一個A型對象的數組: A[] ar。 和一個整數列表: List<int> indexes如何使用LINQ從陣列中刪除對象

如何使用LINQ從ar中刪除indexes中索引的所有對象? 也就是說我需要一個新的(較小的)數組,其索引不在indexes中。使用LINQ。

剩餘對象的順序是否與刪除前相同?

非常感謝。

+1

您是否想獲得新的Array?數組是不可變的,你只能設置NULL而不是引用一個對象 – opewix

+0

@opewix對於我來說,僅僅設置null是不夠的,我需要一個新的(更小的)數組,而不需要索引在「索引」中的對象。 – Ilan

回答

1

您不能僅修改其包含的元素的數組。在通過當前索引謂詞的Where過載

myArray = myArray.Where(x => x.KeepThisElement).ToArray(); 

隨着LINQ到對象(其將要使用在這種情況下)有:

但可以很容易地創建替換陣列:

myArray = myArray.Where((x, idx) => !indexes.Conatins(idx)).ToArray(); 
+0

剩餘對象的順序是否與刪除之前的順序相同?謝謝。 – Ilan

+0

@Ilan是,輸入枚舉按順序處理。 – Richard

1

這可能看起來很奇怪,但你想要做什麼(它不是一個LINQ):

var filtered = new List<A>(); 
for (var i = 0; i < ar.Length; i++) 
{ 
    if (indexes.Contains(i)) 
     continue; 

    filtered.Add(ar[i]]); 
} 

var ar = filtered.ToArray(); 

如果你的整數列表是非常大的,可以考慮使用HashSet<int>而不是列表以獲得更高的性能

+0

@openwix謝謝..非linq版本確實很簡單。但我想用LINQ查詢來做同樣的事情。當然,如果可能的話。 – Ilan