如何检查随机值是否唯一?

fre*_*015 -1 c# arrays random numbers

C#代码:

我在阵列中的1-100之间有20个随机数,程序应检查每个值是否唯一.现在我应该使用另一个方法,如果数组中只有唯一值,则返回true;如果数组中没有任何唯一值,则返回false.如果有人能帮助我,我将不胜感激.

Tim*_*ter 8

bool allUnique = array.Distinct().Count() == array.Count(); // or array.Length
Run Code Online (Sandbox Code Playgroud)

要么

var uniqueNumbers = new HashSet<int>(array);
bool allUnique = uniqueNumbers.Count == array.Count();
Run Code Online (Sandbox Code Playgroud)


Wil*_*sem 5

@TimSchmelters的一个小替代品,可以提高效率:

public static bool AllUniq<T> (this IEnumerable<T> data) {
    HashSet<T> hs = new HashSet<T>();
    return data.All(hs.Add);
}
Run Code Online (Sandbox Code Playgroud)

这基本上是做生成一个for循环:

public static bool AllUniq<T> (this IEnumerable<T> data) {
    HashSet<T> hs = new HashSet<T>();
    foreach(T x in data) {
        if(!hs.Add(x)) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

从一个hs.Add失败的那一刻起- 因为元素已经存在 - 该方法返回false,如果找不到这样的对象,则返回true.

这可以更快地工作的原因是它将从找到重复的那一刻起停止该过程,而先前讨论的方法首先构造唯一数字的集合然后比较大小.现在,如果迭代大量数字,构建整个不同列表可能是计算密集型的.

此外,请注意,生成和测试有更聪明的方法来生成随机的不同数字.例如,交错生成测试过程.一旦一个项目我必须以这种方式纠正生成的数独.结果是一个人不得不等待整整几天才能想出一个谜题.

  • ++:我甚至更喜欢这个 (2认同)