gpt4 book ai didi

c# - 在 C# 中生成多个唯一字符串

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:58 25 4
gpt4 key购买 nike

对于我的项目,我必须生成一个唯一字符串列表。一切正常,但我的问题是最后速度很慢。我试过使用并行循环,但我发现我的 ConcurrentBag<T> ,我正在使用,也很慢。现在我正在使用一个简单的 for 循环和 List<T>现在速度快了一点,但也很慢。

这是我的代码:

private List<string> Generate(int start, int end, bool allowDupes)
{
var list = new List<string>();
var generator = new StringGenerator(LowerCase, UpperCase, Digits, NumberOfCharacters);
for (var i = start; i < end; i++)
{
StringBuilder sb;
while (true)
{
sb = new StringBuilder();
for (var j = 0; j < NumberOfSegments; j++)
{
sb.Append(generator.GenerateRandomString());
if (j < NumberOfSegments - 1)
{
sb.Append(Delimiter);
}
}
if (!allowDupes)
{
if (list.Contains(sb.ToString()))
{
continue;
}
}
break;
}
list.Add(sb.ToString());
GeneratedStringCount = i + 1;
}
return new List<string>(list);
}

我也和我的老师谈过,他会使用相同的算法来生成这些字符串。你知道更好的解决方案吗? (GenerateRandomString()中的StringGenerator方法简单,性能不高。list.Contains(xy)消耗资源多。【Visual Studio性能分析】)

最佳答案

List.Contains 很慢。请改用 HashSet

private List<string> Generate(int start, int end, bool allowDupes)
{
var strings = new HashSet<string>();
var list = new List<string>();
var generator = new StringGenerator(LowerCase, UpperCase, Digits, NumberOfCharacters);
for (var i = start; i < end; i++)
{
while (true)
{
string randomString = GetRandomString();
if (allowDupes || strings.Add(randomString))
{
list.Add(randomString);
break;
}
}
GeneratedStringCount = i + 1;
}
return new List<string>(list);
}

private string GetRandomString()
{
var segments = Enumerable.Range(1, NumberOfSegments)
.Select(_ => generator.GenerateRandomString());
var result = string.Join(Delimeter, segments);
return result;
}

这仍然有可能会降低性能,但您可以使用智能 GenerateRandomString 函数来补救。

关于c# - 在 C# 中生成多个唯一字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18088173/

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