gpt4 book ai didi

c# - 在集合中查找非重复数字的列表。这可以做得更有效/更短的代码吗?

转载 作者:行者123 更新时间:2023-11-30 14:39:08 24 4
gpt4 key购买 nike

static IEnumerable<T> FindUniqueNumbersInCollection<T>(ICollection<T> value)
{
Dictionary<T, byte> hash = new Dictionary<T, byte>();

foreach (T val in value)
{
if (hash.ContainsKey(val)) { hash[val] = 1; continue; }
hash.Add(val, 0);
}

List<T> unique = new List<T>();

foreach (KeyValuePair<T, byte> kvp in hash)
{
if (kvp.Value == 0) unique.Add(kvp.Key);

}

return unique;
}

最佳答案

编辑:

我认为这最终是正确的。 :)

var dict = new Dictionary<T, bool>();
foreach (var v in value)
dict[v] = dict.ContainsKey(v);
foreach (var pair in dict)
if (!pair.Value)
yield return pair.Key; //Algorithmically, as fast as possible

或者如果您想要一些 LINQ:

var dict = new Dictionary<T, bool>();
foreach (var v in value)
dict[v] = dict.ContainsKey(v);
return dict.Keys.Where(k => !dict[k]); //*COULD* be slower on lots of collisions

甚至

var dict = new Dictionary<T, bool>();
foreach (var v in value)
dict[v] = dict.ContainsKey(v);
return dict.Where(p => !p.Value).Select(p => p.Key); //"Fastest".. but not really

我不会说它比你的“更有效率”(实际上不是——它们几乎相同),但它肯定更短。


如果您想要矫枉过正效率(以准确性为代价),您始终可以使用布隆过滤器!

关于c# - 在集合中查找非重复数字的列表。这可以做得更有效/更短的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com