我試圖通過用linq調用替換項目中的現有代碼來依靠linq。在這種方法中,我檢查行列表中的條件,如果條件爲真,則將該元素從行移動到processedLines。從列表A中刪除一組元素並添加到列表B中使用Linq
的數據結構只是列出:
List<LineSegment2> lines;
List<LineSegment2> processedLines;
原始代碼是:
for (int i = lines.Count - 1; i >= 0; i--)
{
if (lines[i].P2.x < sweepPosition)
{
processedLines.Add(lines[i]);
lines.RemoveAt(i);
}
}
和我的LINQ代碼:
var toMove = lines.FindAll(x => x.P2.x < sweepPosition);
toMove.ForEach(x =>
{
processedLines.Add(x);
lines.Remove(x);
});
我的問題是:這是LINQ代碼效率較低,因爲它使用更多的內存來創建臨時列表'toMove'。有沒有一種方法可以創建linq查詢而不需要臨時列表或原始代碼總是更有效?
您的「LINQ」代碼根本不使用LINQ。 FindAll和ForEach都存在於.NET 2中,不屬於LINQ。 –
您不需要將'toMove'的所有元素添加到'processedLines',您可以讓'processedLines'成爲調用'FindAll'的結果 – weidi
@weidi:假設'processedLines'爲空。 – Guffa