可以从列表中的所有元素中选择一个属性吗?

时间:2013-12-13 00:36:30

标签: list game-engine xna-4.0

我正在尝试制作跟踪算法,为此我需要不断获取列表中所有元素的位置,我想知道是否有一种方法可以在单行中执行它而不需要“ForEach” “,我知道你可以将一个完整的清单复制到另一个清单,这就是我现在正在做的事情。

我有这个:

列表副本=原始列表;

但我想做这样的事情

列表副本=列出original.Position

注意:position是我列表中的vector2 var。

1 个答案:

答案 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为例。

我希望这有所帮助。