Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向列表或其他对象添加唯一项_C#_Dictionary_Unique - Fatal编程技术网

C# 向列表或其他对象添加唯一项

C# 向列表或其他对象添加唯一项,c#,dictionary,unique,C#,Dictionary,Unique,我正试图找到一种有效的方法,向列表中添加唯一的数值。目前,我正在使用字典对象。第一个值是生成的数字;不管它是什么,只要它的生成可以在相同的情况下重复。第二项是原件。所以,我想说: Dictionary<int,int> orderedList = new Dictionary<int,int>(MaxNoOfTimes); for (i = 0; i<MaxNoOfTimes, i++) { int j = getNewValue(); r

我正试图找到一种有效的方法,向列表中添加唯一的数值。目前,我正在使用
字典
对象。第一个值是生成的数字;不管它是什么,只要它的生成可以在相同的情况下重复。第二项是原件。所以,我想说:

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;
    }
Dictionary orderedList=新字典(MaxNoOfTimes);
对于(i=0;i

for (i = 0; i<MaxNoOfTimes, i++)
{   
    int j = getNewValue();

    while(orderedList.ContainsKey(j))
    {
        j = getNewValue();
    }

    orderedList.Add(j, i);
}
(i=0;i如何:

Hashset<int> orderedSet = new Hashset<int>();
while(orderedSet.Count < maxNoTimes)
{   
   int j = getNewValue();
   orderedSet.Add(j);
}

为什么要使用
i++
两次?是什么原因导致
ArgumentException
?@jeroenvanevel当字典中已经存在元素时,您会得到
ArgumentException
。我认为哈希集就是您要找的。它的“Add”方法返回一个布尔值,如果它是否被添加到集合中。@MarcinJuraszek:你说得对,错过了。@Ron:你为什么不检查一下它是否存在?你确定它有效吗?你没有改变
j
,这是你入门的关键。我会尝试一下,但我唯一担心的是无限while循环的可能性。需要更多的测试,但我会说99%的时间是由于异常。现在,它太快了!谢谢!
var orderedDictionary = orderedSet.ToDictionary(i => orderedSet.ToList().IndexOf(i), i => i).OrderBy(i => i.Value);