【发布时间】:2013-12-29 21:09:59
【问题描述】:
我正在尝试找到一种将唯一数值添加到列表的有效方法。目前,我正在使用Dictionary<int,int> 对象。第一个值是生成的数字;只要它的生成可以在相同的情况下重复,它是什么都没关系。第二项是原件。所以,我会这样:
Dictionary<int,int> orderedList = new Dictionary<int,int>(MaxNoOfTimes);
for (i = 0; i<MaxNoOfTimes, i++)
{
int j = getNewValue();
retry:
try
{
orderedList.Add(j,i);
}
catch (ArgumentException ex)
{
goto retry;
}
虽然这可行,但它似乎不合适,我认为由于异常处理,它非常慢。 MaxNoOftimes 的值可以达到几个 1000(实际上没有实际限制,但很少有超过几个 1000)。有没有更快的方法?完成将值添加到orderedList 后,我从orderedList 创建一个SortList。
【问题讨论】:
-
你为什么使用
i++两次?什么可能导致ArgumentException? -
@JeroenVannevel 当字典中已经存在元素时,您会得到
ArgumentException。 -
我认为 Hashset
将是您正在寻找的。它的 Add 方法返回一个布尔值是否被添加到集合中。 -
@MarcinJuraszek:你是对的,错过了。 @Ron:你为什么不直接用
ContainsKey()检查它是否存在? -
你确定它有效吗?您不会更改
j,这是您进入的关键
标签: c# dictionary unique