【问题标题】:Adding unique string in string array in c#在c#中的字符串数组中添加唯一的字符串
【发布时间】:2017-06-25 19:45:30
【问题描述】:

我关心的是向字符串数组添加字符串,但我想在插入数组之前确保该字符串是唯一的。我搜索并找到了很多方法,但我担心的是更快,而不是在添加字符串之前检查所有数组元素是否重复,所以我决定执行以下操作:

  1. 获取字符串(来自 URL Mining Project 的 URL,可能会返回数千个 URL,有时可能会重复,如交叉引用)。
  2. 获取 URL 中所有字符的 ASCII 并将它们相加乘以 char 的索引(这是为了使每个 URL 具有唯一标识符)。
  3. 第 2 点中的这个值将是数组中插入这个 URL 的索引。
  4. 现在的问题是,这个数组应该是动态的(如何根据我正在挖掘的 URL 数量调整它的大小?)。
  5. 数组将是多孔的(意味着数组有许多空值),是否有任何有效的方法来获取只有值的单元格?
  6. 以下代码用于获取唯一字符串的位置。
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);
}

【问题讨论】:

  • 为什么不使用列表 (List<T>)?您可以随时检查list.Contains(value)。或.Add(value).
  • 或者只使用哈希算法 (SHA256) 并将其插入字典。您可以在插入之前检查相同的哈希是否存在。
  • 你可以试试 DateTime.Now().ToString() 我永远是独一无二的
  • 我会尝试使用这种技术

标签: c# arrays string unique


【解决方案1】:

如 cmets 中所述,HashSet 将是用于这种情况的集合。它代表一组(唯一的)值并具有 O(1) 查找。 因此,您只需循环要插入的字符串并将它们添加到集合中。如果字符串已经在其中,则不会再次添加。

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

【讨论】:

  • 感谢 Magnus,我用 hashset 很好地优化了我的代码,并且到目前为止工作正常,尽管我还没有在大量元素上对其进行测试,
【解决方案2】:

我使用了 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];
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2021-08-29
    • 1970-01-01
    • 2015-03-09
    • 2021-12-30
    相关资源
    最近更新 更多