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)
@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.
这可以更快地工作的原因是它将从找到重复的那一刻起停止该过程,而先前讨论的方法首先构造唯一数字的集合然后比较大小.现在,如果迭代大量数字,构建整个不同列表可能是计算密集型的.
此外,请注意,生成和测试有更聪明的方法来生成随机的不同数字.例如,交错生成和测试过程.一旦一个项目我必须以这种方式纠正生成的数独.结果是一个人不得不等待整整几天才能想出一个谜题.
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |