从输入数据流中查找重复计数
本文关键字:查找 输入 数据流 | 更新日期: 2023-09-27 18:15:16
我试了好几次,但都找不到解决问题的方法。我的文本文件如下所示。
695
748
555
695
748
852
639
748
我使用for循环来读取数据并将它们放入数组中。现在我想从输入的txt数据中过滤重复的数字。我怎样才能得到重复数据的计数。
static void Main(string[] args)
{
int x = 0;
int count = 0;
String[] line = File.ReadAllLines("C:/num.txt");
int n = line.Length;
String[] res = new String[n];
for (int i = 0; i < n; i++)
{
res[i] = line[i].Substring(x,x+8);
Console.WriteLine(res[i]);
}
Console.ReadLine();
}
您使用GroupBy()
var result = res.GroupBy(x => x);
foreach(var g in result)
{
Console.WriteLine(g.Key + " count: " + g.Count());
}
无论如何,你必须记录你以前见过的东西。
一种方法是在你第一次看到这些数字的时候把它们放在一个列表里。如果给定的数字已经在列表中,则在后面出现时将其过滤掉。
这里有一个列表的例子。注意,获取输入的子字符串的代码会崩溃。
static void Main(string[] args)
{
int x = 0;
int count = 0;
String[] line = new string[] { "123", "456", "123" }; //File.ReadAllLines("C:/num.txt");
int n = line.Length;
String[] res = new String[n];
List<string> observedValues = new List<string>();
for (int i = 0; i < n; i++)
{
string consider = line[i]; // This code crashes: .Substring(x, x + 8);
if (!observedValues.Contains(consider))
{
observedValues.Add(consider);
res[i] = consider;
Console.WriteLine(res[i]);
}
else
{
Console.WriteLine("Skipped value: " + consider + " on line " + i);
}
Console.ReadLine();
}
}
另一种方法是对输入进行预排序,使重复项相邻。
的例子:
(注意,您可能希望在排序之前删除输入中的空白。前导空格会破坏此代码)。
static void Main(string[] args)
{
int x = 0;
int count = 0;
String[] line = new string[] { "123", "456", "123" }; //File.ReadAllLines("C:/num.txt");
int n = line.Length;
String[] res = new String[n];
string previous = null;
Array.Sort(line); // Ensures that equal values are adjacent
for (int i = 0; i < n; i++)
{
string consider = line[i].Trim(); // Note leading whitespace will break this.
if (consider != previous)
{
previous = consider;
res[i] = consider;
Console.WriteLine(res[i]);
}
else
{
Console.WriteLine("Skipped value: " + consider + " on line " + i);
}
Console.ReadLine();
}
}
现在我想从输入的txt数据中过滤重复的数字。
如果你需要的是过滤掉重复的,你可以使用这个:
String[] line = File.ReadAllLines("C:/num.txt");
var filteredLines = line.Distinct();
foreach (var item in filteredLines)
Console.WriteLine(item);