2011-12-19 2 views
0

여러 줄이 포함 된 텍스트 파일이 있는데 그 중 많은 줄이 중복됩니다.텍스트 파일의 줄을 순위순으로 표시

내가 가장 나타나는 사람은 상단과 하단에 적어도 표시되는 목록을 묘사합니다.

그러나 목록에 문자열이 몇 번 표시되는지 표시하고 싶습니다.

어떻게 이렇게 가겠어요? 파일이 너무 커서 아닌 경우 메모리에 들어갈 수있는 경우에 저장할 수 있습니다, 즉,

using(StreamReader sr = new StreamReader("my file")) { 
    Dictionary<string, int> items = new Dictionary<string, int>(); 

    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

빠른 'n'을 쉬운 방법은 Dictionary 및 루프를 사용하는 것 사전.

은 "텍스트의 라인"의 사전 확인 ->

한 번에 선 파일을 읽기 "가 볼 됐어요 횟수". 행이 이미 사전에 있으면 사전 값을 1 씩 증가시킵니다. 선이 새로운 경우 사전에 추가하고 값을 1로 설정하십시오.

전체 파일을 읽은 후에 키/값을 꺼낼 수 있습니다. 값별로 정렬하여 가장 많이 발생하는 값을 찾고 결과를 인쇄하십시오.

0

:

0

.NET 프레임 워크 3.0의 코드 :

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

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

    public static void Main() 
    { 
    Dictionary<string, int> histogram = new Dictionary<string, int>(); 
    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<KeyValuePair<string, int>> sortedHistogram = new List<KeyValuePair<string, int>>(histogram); 
    sortedHistogram.Sort(Compare); 
    foreach (KeyValuePair<string, int> 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

+0

예 - 죄송합니다. 수정 : pls now now – kol

+0

LINQ 부분도 제거해야했습니다. .NET 3.5에 나타났습니다. – kol

관련 문제