从输入数据流中查找重复计数...

时间:2011-11-21 21:06:04

标签: c#

我已经尝试了好几次但找不到解决问题的方法。这里我的txt文件如下所示。

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();

    }

3 个答案:

答案 0 :(得分:2)

不知何故,你必须跟踪你以前见过的事情。

这样做的一种方法是在第一次看到它们时将数字放在列表中。如果给定的数字已经在列表中,则在后一次出现时将其过滤掉。

以下是列表的示例。请注意,用于获取输入的子字符串的代码崩溃。

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();

    }
}

答案 1 :(得分:2)

您使用GroupBy()

var result = res.GroupBy(x => x);
foreach(var g in result)
{
      Console.WriteLine(g.Key + " count: " + g.Count());
}

答案 2 :(得分:1)

  
    
      

所以现在我想从输入的txt数据中过滤重复数字。

    
  

如果你需要的只是过滤掉重复项,你可以使用它:

String[] line = File.ReadAllLines("C:/num.txt");
var filteredLines = line.Distinct();

foreach (var item in filteredLines)
    Console.WriteLine(item);