2016-10-25 7 views
-2

このルールに基づいて最も良い単語は何ですか:(単語内の別個の文字)^ 2 /(単語内の合計文字)です。だから私はいくつかの基本的なものから始めたさまざまなリストのリーダーボード

しかし、私はまた、 "最高の"言葉と相対的な点を持つリーダーボードを持っていると思います。私はポイントを持つ単語を見つけるために異なるリストを必要とする考えを持っていますが、それを行うためのより簡単で速い方法がありますか?私が代わりにの単一Dictionary<string, double>単語とそれに対応する)を使用することをお勧め

答えて

0

Listsをzip形式:

Dictionary<string, double> points = File 
    .ReadLines(FILE_PATH) 
//.Where(line => !string.IsNullOrEmpty(line)) // you may want to filter out empty lines 
    .Select(line => new { 
    word = line, 
    unique = word.Distinct().Count() 
    total = word.Length }) 
    .ToDictionary(item => item.word, 
       item => 15 * Math.PI * item.unique * item.unique/item.total); 

だから、簡単の助けを借りてリーダーボードを実装することができますLinq

var TopTen = points 
    .OrderByDescending(pair => pair.Value) 
    .ThenBy(pair => pair.Key) 
    .Take(10) 
    .Select(pair => $"word: {pair.Key} points: {pair.Value}"); 

    Console.Write(String.Join(Environment.NewLine, TopTen)); 
関連する問題