2

问题:List<string>通过迭代地逐个添加字符串来构建 a 。最终结果必须是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 个检查。

4

2 回答 2

5

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

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

于 2013-10-21T10:13:23.720 回答
1

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

于 2013-10-21T10:17:34.973 回答