我正在尝试制作跟踪算法,为此我需要不断获取列表中所有元素的位置,我想知道是否有一种方法可以在单行中执行它而不需要“ForEach” “,我知道你可以将一个完整的清单复制到另一个清单,这就是我现在正在做的事情。
我有这个:
列表副本=原始列表;
但我想做这样的事情
列表副本=列出original.Position
注意:position是我列表中的vector2 var。
答案 0 :(得分:1)
我建议使用Linq:
List<Position> copy = original.Select(e => e.Position).ToList();
'e'我随机选择,e代表元素。它表示列表中的每个元素。这相当于:
List<Position> copy = new List<Position>();
foreach(Element e in original)
{
copy.Add(e.Position);
}
这将返回List<Position>
。请注意,此列表与原始列表的类型不同。
另请注意,Linq查询虽然干净,简洁且易于阅读,但效率不如手动循环。然而,对于一个小的列表,几百或更少,你不会看到任何差异。
以下是关于此主题的非常深入的SO问题的链接:foreach + break vs linq FirstOrDefault performance difference
以下是使用linq查询的链接:http://msdn.microsoft.com/en-us/library/bb397906.aspx
在最后一个链接(到MSDN)的示例中,您将看到两种形式的linq表示法。一个是我用过的标准符号。另一种是查询表单,类似于使用标准表示法调用Where()
。我发现查询符号类似于编写SQL查询。
最后要注意的是,您还可以使用ToArray()
代替ToList()
生成数组。如果副本具有固定大小并且您将随机访问它们,则是优选的。无论你使用哪种,你都可以依赖副本的顺序与原作相同,这就是你应该如何将它与原作相关联,所以copy
中的第4个位置是第4个元素的位置以original
为例。
我希望这有所帮助。