问题:通过迭代地逐个添加字符串来构建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次检查。
答案 0 :(得分:5)
最好的方法是使用HashSet<string>
代替,这将透明地“吃掉”重复项。当使用集合时,“检查是否重复”操作不仅是自动的,而且比使用列表时更快(恒定时间与线性)。
如果您的字符串使用者可以使用IEnumerable<string>
那就是您需要做的全部内容;否则,使用Enumerable.ToList
将集合转换为列表。
答案 1 :(得分:1)
在你的场景中你应该使用Hashset,因为它会给你O(1)来检查包含。除非已对其进行排序,否则Wheras List将执行O(n)。