C#:如果数组不包含字符串,则向数组中添加字符串

C#:如果数组不包含字符串,则向数组中添加字符串,c#,C#,我有很多字符串数组。从所有这些字符串数组中,我想创建一个唯一字符串数组。目前我是这样做的: string[] strings = {}; while(running) { newStringArrayToAdd[] = GetStrings(); strings = strings.Concat(newStringArrayToAdd).ToArray(); } uniqueStrings = strings.Distinct.ToArray(); 这是可行的,但速度非常慢,因

我有很多字符串数组。从所有这些字符串数组中,我想创建一个唯一字符串数组。目前我是这样做的:

string[] strings = {};

while(running)
{
   newStringArrayToAdd[] = GetStrings();
   strings = strings.Concat(newStringArrayToAdd).ToArray();
}

uniqueStrings = strings.Distinct.ToArray();

这是可行的,但速度非常慢,因为我必须在内存中保留字符串变量,这会变得非常巨大。因此,我正在寻找一种方法来动态检查字符串是否在uniqueStrings中,如果不是,则立即添加它。我该怎么做呢?

您能保留字符串哈希的列表吗

添加新字符串时,如果其哈希值不在列表中,则知道其唯一性

如果存在散列,那么它可能是唯一的,或者可能是散列冲突,因此您必须进行长期检查。但这应该是一种相对罕见的情况。

使用
哈希集。以下是有关列表工作方式的更多信息:

请改用。像这样:

HashSet<string> uniqueStrings = new HashSet<string>();

for loop...
if (!uniqueStrings.Contains(newStringToAdd))
{
  uniqueStrings.Add(newStringToAdd);
}
考虑使用数组而不是数组。如果该字符串已存在于集合中,则它将不执行任何操作:

HashSet<string> strings = new HashSet<string>();

strings.Add("foo");
strings.Add("foo");

strings.Count // 1

您可以使用
Union

string[] result = strings.Union(strings2).ToArray();
因此,将代码更改为

string[] strings = {};

while(running)
{
   newStringArrayToAdd[] = GetStrings();
   strings = strings.Union(newStringArrayToAdd).ToArray();
}

// No need for this line as strings will be unique
//uniqueStrings = strings.Distinct.ToArray();
依照

此方法从返回集中排除重复项。这与Concat方法不同,Concat方法返回输入序列中的所有元素,包括重复项


您是否考虑过将字符串存储在哈希集而不是数组中?哈希集将保证每次添加到哈希集时在固定时间内的唯一性

var strings = new HashSet<string>();
strings.Add("abc");
strings.Add("abc");
strings.Count // is 1
var strings=newhashset();
字符串。添加(“abc”);
字符串。添加(“abc”);
strings.Count//是1

您可以使用
哈希集
为您进行过滤:

HashSet<string> strings = new HashSet<string>();

for loop....
  foreach (string s in newStringArrayToAdd)
    strings.Add(s);
end of loop:

uniqueStrings = strings.ToArray();
HashSet strings=newhashset();
对于循环。。。。
foreach(newStringArrayToAdd中的字符串s)
字符串。添加(s);
循环结束:
uniqueStrings=strings.ToArray();

为什么不使用StringBuilder?是否可以将所有字符串添加到
哈希集
?只是为了澄清。。。您的输入是一个或多个数组?您想要的输出是一个唯一的数组?我的输入是数组,我想要一个数组。@RoflcoptrException您最好展示更多关于如何获取输入的代码,以便更好地得到答案。但是,我需要一个额外的循环?谢谢,我使用了这个循环,然后将哈希集复制回字符串数组。
var strings = new HashSet<string>();
strings.Add("abc");
strings.Add("abc");
strings.Count // is 1
HashSet<string> strings = new HashSet<string>();

for loop....
  foreach (string s in newStringArrayToAdd)
    strings.Add(s);
end of loop:

uniqueStrings = strings.ToArray();