在添加之前检查重复项,还是在完成后选择不同的?

时间:2013-10-21 10:11:25

标签: c#

问题:通过迭代地逐个添加字符串来构建List<string>。最终结果必须是List<string>,没有重复。

1)在列表中添加字符串时,请使用myList.Contains(myString)检查字符串是否已存在,如果不存在则myList.Add(myString)。最终结果没有重复,但每次都会检查列表。

2)只需myList.Add(myString),无需每次都检查列表,然后在需要时,使用一些技巧从列表中有效SELECT DISTINCT。例如https://stackoverflow.com/a/7572073/1061602 - 该答案将进行调整,因为最终结果只需List<string>

问:哪种方法在效率和可读性方面最好?(1,2或其他什么?)。

List<string>不会过大,但最终可能包含大约10个字符串,大约有200个字符。这可以扩展到大约30个字符串,大约600次检查。

2 个答案:

答案 0 :(得分:5)

最好的方法是使用HashSet<string>代替,这将透明地“吃掉”重复项。当使用集合时,“检查​​是否重复”操作不仅是自动的,而且比使用列表时更快(恒定时间与线性)。

如果您的字符串使用者可以使用IEnumerable<string>那就是您需要做的全部内容;否则,使用Enumerable.ToList将集合转换为列表。

答案 1 :(得分:1)

在你的场景中你应该使用Hashset,因为它会给你O(1)来检查包含。除非已对其进行排序,否则Wheras List将执行O(n)。