在c#中的字符串数组中添加唯一字符串

时间:2017-02-08 09:12:39

标签: c# arrays string unique

我担心的是将字符串添加到字符串数组中,但我希望在插入数组之前确保此字符串是唯一的。我搜索并找到了很多方法,但我关心的是在添加字符串之前加快而不是检查所有数组元素是否重复,所以我决定做以下事情:

  1. 获取字符串(来自URL挖掘项目的URL,可能会返回数千个URL,有时可能会重复,因为交叉引用)。
  2. 获取URL中所有字符的ASCII,并将它们加上char的索引(这是为每个URL创建唯一标识符)。
  3. 第2点中的值将是数组中用于插入此URL的索引。
  4. 问题现在,这个数组应该是动态的(如何根据我的挖掘数量来调整它的大小?)
  5. 数组将是多孔的(意味着具有许多空值的数组),是否有任何有效的方法来获取仅具有值的单元格?
  6. 下面的代码用于获取唯一字符串的位置。
  7. int index = 1;
    int position = 0;
    string s = Console.ReadLine();
    byte[] ASCIIValues = Encoding.ASCII.GetBytes(s);
    
    foreach(byte b in ASCIIValues) 
    {
        position += b * index;
        index++;
        Console.WriteLine(b);
    }
    

2 个答案:

答案 0 :(得分:3)

如评论中所述,HashSet将是用于此案例的集合。它表示一组(唯一的)值,并具有O(1)查找。 因此,您只需循环插入要插入的字符串并将其添加到集合中。如果该字符串已经存在,则不会再次添加。

var set = new HashSet<string>();
foreach(var s in strings)
   set.Add(s);

答案 1 :(得分:0)

我使用了Dictionary并设法解决它..请检查下面链接中的代码

Hashset handling to avoid stuck in loop during iteration

虽然我使用proc添加两个字典并确保没有重复,但有时候我的代码会出错并尝试添加重复的密钥!!!

下面的代码我发现它在某处工作正常并且在上面的链接中我使用迭代在迭代期间添加删除。

 public static void Add2Dic(IDictionary firstDict, IDictionary secondDict, bool bReplaceIfExists)
    {
        foreach (object key in firstDict.Keys)
        {
            if (!secondDict.Contains(key))
                secondDict.Add(key, firstDict[key]);
            else if (bReplaceIfExists)
                secondDict[key] = firstDict[key];
        }
    }