基于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#。
检查数据,并将第二个单词放入字典中,以了解它以前是否出现过。代码示例:
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();
}
}