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();