2010-10-18 79 views
1

当我编程时,我想出了这个问题,方法:什么是更好的列表或对象?

有什么更好的方法接受单个实体或这些实体的列表?

例如,我需要一个字符串列表。我可以有:

  • 一种方法接受一个List并返回一个带有结果的字符串列表。

    List<string> results = methodwithlist(List[objects]); 
    

  • 接受对象的方法和返回字符串。然后在循环中使用这个函数,然后填充一个列表。

    for int i = 0; i < List<objects>.Count;i++;) 
    { 
        results = methodwithsingleobject(List<objects>[i]); 
    } 
    

**这仅仅是一个例子。我需要知道哪一个更好,或更多使用和为什么。

谢谢!

+0

我是一个java/scala的家伙,但我相信你可以更好地使用列表理解(linq?) – 2010-10-18 09:23:09

+0

看看5.1。4在这里,必须给你一个'功能'的方式:http://docs.python.org/tutorial/datastructures.html – 2010-10-18 09:24:49

+0

在你的第二个例子中,我猜你的意思是results.add(methodwithsingleobject(List [i]))因为你的版本将取代for循环中每次迭代的结果。 – 2010-10-18 09:25:36

回答

7

好吧,当你有第二个时,很容易构建第一个表单 - 但是使用LINQ,一旦你有了投影,你就不需要编写自己的表单。例如,你可以写:

List<string> results = objectList.Select(X => MethodWithSingleObject()).ToList(); 

通常更容易编写和测试只用一个值交易的方法,除非它实际上需求知道值的集合中的其余部分(例如,为了找到聚合)。

+0

是的,正是我在想什么:-) – 2010-10-18 09:25:37

2

我会选择第二个,因为当你有一个单一的字符串时它更容易使用(即它更通用)。而且,方法本身的责任更加清晰,因为如果目的只是修改一个字符串,该方法不应该与列表有任何关系。

此外,您还可以使用LINQ简化呼叫:

result = yourList.Select(p => methodwithsingleobject(p)); 
1

学习任何语言时,这个问题来了很多,得到的答案是有点无实际意义,因为该标准编码的做法是依靠LINQ优化代码为您在运行时。但是,这假定您正在使用支持它的语言版本。但是,如果你想要做一些这方面的研究有一些深入到这一点,也给外部资源来回顾一些堆栈溢出文章:

  1. In .NET, which loop runs faster, 'for' or 'foreach'?
  2. C#, For Loops, and speed test... Exact same loop faster second time around?

我有什么据了解,尽管如此,并不是太依赖Count,而是使用Length作为类型集合,因为这可以更快。

希望这是有帮助的。

相关问题