基于C#中的子字符串获取唯一字符串

本文关键字:字符串 获取 唯一 基于 | 更新日期: 2023-09-27 18:24:09

我有一个文本文件,其中包含近100000个条目。所有这些都是特定的模式,如
word1 word2 word3 word4

然而,其中许多条目是重复的,其中所有单词都是相同的。当我试图读取并形成一个数组或唯一数组列表时,我会使用一个中间哈希集来完成。它运行得很好
但从本质上讲,我想实现的只是word2的唯一条目。就像单词2是常见的,而其他单词都不同一样,我想保留其中的任何一个条目
例如
cat dog lion tiger
cat dog deer bear
mouse rat bear deer
lion tiger cat dog
cat dog deer bear

在这种情况下,所需的输出为:
cat dog lion tiger
mouse rat bear deer
lion tiger cat dog


cat dog deer bear
mouse rat bear deer
lion tiger cat dog

目前哈希集给出的是:

cat dog lion tiger
cat dog deer bear
mouse rat bear deer
lion tiger cat dog

在数据集很大的情况下,关于如何有效地实现这一点的任何建议都是巨大的。使用regex是这里唯一的选项吗?我正在使用C#。

基于C#中的子字符串获取唯一字符串

检查数据,并将第二个单词放入字典中,以了解它以前是否出现过。代码示例:

    string[] file = {   "cat dog lion tiger",
                    "cat dog deer bear",
                    "mouse rat bear deer",
                    "lion tiger cat dog",
                    "cat dog deer bear"};
    Dictionary<string, string> dict = new Dictionary<string, string>();
    List<string> lst = new List<string>();
    foreach (string s in file)
    {
        string[] words = s.Split(' ');
        // assumption - thare are at least 2 words in a line - validate it
        if (!dict.ContainsKey(words[1]))
        {
            lst.Add(s);
            dict.Add(words[1], words[1]);
        }
    }
    foreach (string s1 in lst)
        Console.WriteLine(s1);

您可以创建一个辅助类来存储字符串,并实现接口IEqualityComparer到HashSet,

示例:

        HashSet<WordsRow> list = new HashSet<WordsRow>(new WordsRow());
        list.Add(new WordsRow("cat dog lion tiger"));
        list.Add(new WordsRow("cat dog deer bear"));
        list.Add(new WordsRow("mouse rat bear deer"));
        list.Add(new WordsRow("lion tiger cat dog"));
        list.Add(new WordsRow("cat dog deer bear"));

        foreach (WordsRow row in list)
        {
            Console.WriteLine(row.Row);
        }

"WordRow类"必须包含以下内容::

public class WordsRow : IEqualityComparer<WordsRow>
{
    public string Row {get; set;}
    public WordsRow() { }
    public WordsRow(string row)
    {
        this.Row = row;                        
    }
    public bool Equals(WordsRow x, WordsRow y)
    {
        return x.Row.Split(' ')[1] == y.Row.Split(' ')[1];
    }
    public int GetHashCode(WordsRow obj)
    {
        return obj.Row.Split(' ')[1].GetHashCode();
    }
}