テキストファイルの行をランク順に表示する

私はいくつかの行を含むテキストファイルを持っている、それらの多くは重複しています。

私は、一番上に表示されるものが一番上に表示され、一番下に表示されるリストを描きたい。

しかし、リストの中に文字列が何回表示されるかを表示したい。

これをどうやってやりますか?

0

3 答え

素早く簡単な方法は、 Dictionary を使用してループすることです。

using(StreamReader sr = new StreamReader("my file")) {
    Dictionary items = new Dictionary();

    while(sr.BaseStream.Position < sr.BaseStream.Length) {
        string s = sr.ReadLine();
        if(items.ContainsKey(s)) {
            items[s]++;
        } else {
            items.Add(s, 1);
        }
    }

   //You now have a dictionary of unique strings and their counts - you can sort it however you need.
}
0
追加された

.NET Framework 3.0用のコード:

using System;
using System.IO;
using System.Collections.Generic;

public class Program
{
  private static int Compare(KeyValuePair kv1, KeyValuePair kv2)
  {
    return kv2.Value == kv1.Value ? kv1.Key.CompareTo(kv2.Key) : kv2.Value - kv1.Value;
  }

  public static void Main()
  {
    Dictionary histogram = new Dictionary();
    using (StreamReader reader = new StreamReader("Test.txt"))
    {
      string line;
      while ((line = reader.ReadLine()) != null)
      {
        if (histogram.ContainsKey(line))
          ++histogram[line];
        else
          histogram.Add(line, 1);
      }
    }

    List> sortedHistogram = new List>(histogram);
    sortedHistogram.Sort(Compare);
    foreach (KeyValuePair kv in sortedHistogram)
      Console.WriteLine("{0}\t{1}", kv.Value, kv.Key);
  }
}

Test.txt:

ddd
aaa
ccc
bbb
aaa
aaa
bbb

出力:

3   aaa
2   bbb
1   ccc
1   ddd
0
追加された
私はこれを使用することはできません - フレームワーク4.0?
追加された 著者 qwertyuywertwer,
はい - 申し訳ありませんが、私はこれを修正:) pls今すぐテスト
追加された 著者 kol,
私もLINQの部分を削除しなければならなかった、それは.NET 3.5で登場した
追加された 著者 kol,
私はLINQベースの順序をSystem.Comparison デリゲートに置き換えました。
追加された 著者 kol,
これは2.0でもコンパイルされます
追加された 著者 kol,

ファイルが大きすぎない場合、つまりメモリに収まる場合は、辞書に格納することができます。

Make a dictionary of "line of text" -> "number of times it's been seen"

一度に1行ずつファイルを読み込みます。行がすでに辞書に入っている場合は、辞書値を1だけインクリメントします。行が新しい場合は、辞書に追加して値を1に設定します。

ファイル全体を読み終えたら、キー/値を引き出すことができます。値でソートして最も出現した値を見つけ、結果を印刷します。

0
追加された