如何从文本框中删除重复的行结果

  • 本文关键字:结果 删除 文本 c#
  • 更新时间 :
  • 英文 :


这是我的数据结果代码

它得到重复的行结果

我想删除重复的结果

请帮我

private void DataResult(string result, string acc, string file)
{
lock (this)
{
if (result == "good")
{
MetroTextBox metroTextBox = this.textBox1;
metroTextBox.Text = metroTextBox.Text + acc + Environment.NewLine;
file = Path.Combine(this.papka, "good.txt");
if (!Directory.Exists(this.papka))
{
Directory.CreateDirectory(this.papka);
}
File.AppendAllText(file, acc + "rn");
Listing.good++;
}
if (result == "error")
{
Listing.error++;
}
}
}

将其添加到页面顶部的using指令:

using System.Linq;

然后简单地这样使用:

metroTextBox.Text = string.Join(Environment.NewLine, metroTextBox.Lines.Distinct());

在您的示例中:

private void DataResult(string result, string acc, string file)
{
lock (this)
{
if (result == "good")
{
MetroTextBox metroTextBox = this.textBox1;
metroTextBox.Text = string.Join(metroTextBox.Lines.Distinct(), acc, Environment.NewLine);
file = Path.Combine(this.papka, "good.txt");
if (!Directory.Exists(this.papka))
{
Directory.CreateDirectory(this.papka);
}
File.AppendAllText(file, acc + "rn");
Listing.good++;
}
if (result == "error")
{
Listing.error++;
}
}
}

假设此方法是将行添加到文本框的唯一方法,那么在添加之前,您可能应该检查文本框是否包含acc

if(!metroTextBox.Text.Contains(acc))
metroTextBox.Text = metroTextBox.Text + acc + Environment.NewLine;

旁注;如果重命名表单上的文本框,则不需要使用其他名称为其建立变量。单击表单上的文本框,在显示(Name(textbox1的属性网格中,将其更改为metroTextBox

旁注2;每次向文本框添加一行时,此代码都会将文本框的内容附加到文件中。如果文件名没有更改,这也可能是重复的来源,因为添加3行后,您的文件将看起来像:

line1
line1
line2
line1
line2
line3

我不建议你像在文本框中添加一行那样频繁地编写文件;一个操作很琐碎,另一个操作非常缓慢且复杂。将这些东西分成不同的方法,并较少地调用写文件

您可以尝试在HashSet<string>的帮助下收集唯一的结果,例如

private HashSet<string> m_Results = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

然后

private void DataResult(string result, string acc, string file)
{
lock (this)
{
if (result == "good")
{
if (m_Results.Add(result)) {
// result is unique (not in m_Results)
MetroTextBox metroTextBox = this.textBox1;
metroTextBox.Text = metroTextBox.Text + acc + Environment.NewLine;
file = Path.Combine(this.papka, "good.txt");
//DONE: no need to check for directoty exitance
Directory.CreateDirectory(this.papka);
File.AppendAllText(file, acc + "rn");
}
else {
// result has been appeared before 
}
Listing.good++;
}
if (result == "error")
{
Listing.error++;
}
}
}

最新更新