如何在不重新排列数组元素的情况下计算数组中的唯一数字?

jar*_*rus 9 c# arrays algorithm

我无法计算数组中的唯一值,我需要这样做而不重新排列数组元素.

我怎么能做到这一点?

Qui*_*son 16

如果你有.NET 3.5,你可以通过LINQ轻松实现这一点:

int numberOfElements = myArray.Distinct().Count();
Run Code Online (Sandbox Code Playgroud)

非LINQ:

List<int> uniqueValues = new List<int>();
for(int i = 0; i < myArray.Length; ++i)
{
    if(!uniqueValues.Contains(myArray[i]))
        uniqueValues.Add(myArray[i]);
}
int numberOfElements = uniqueValues.Count;
Run Code Online (Sandbox Code Playgroud)


Sam*_*ron 7

这是一个非常有效的非LINQ实现.

        var array = new int[] { 1, 2, 3, 3, 3, 4 };
        // .Net 3.0 - use Dictionary<int, bool> 
        // .Net 1.1 - use Hashtable 
        var set = new HashSet<int>();
        foreach (var item in array) {
            if (!set.Contains(item)) set.Add(item);
        }
        Console.WriteLine("There are {0} distinct values. ", set.Count);
Run Code Online (Sandbox Code Playgroud)