0

私は自分の仕事のためのプロジェクトを作成していますが、大きな問題があります... CSV(カンマ区切り値)ファイルからユーザーに関する情報を取得するソフトウェアを作成しています。すべてのユーザーは、自分の電話番号と自分が呼び出された番号を持っています。情報がファイルから収集されたら、番号に使用されているすべての電話番号を取得して、昇順で並べ替えます。私は電話番号のすべての発生になりたくありません、ただこれはアップするのに長い期間があります。つまり、次のようになります。

1-345345-9375683027
2-345345-3070982743
3-345345-9375683027
4-345345-3070982743
5-345345-9375683027
6-345345-2389479734
7-345345-2349875993

番号1、3、5は同じです。2番と4番は同じです。このように番号を並べ替えたい:

1-345345-9375683027
2-345345-3070982743
3-345345-2389479734
4-345345-2349875993

今、1人が最も一般的で、2人は最初の人よりも少ないcomonなので、1人...私は何かを試していましたが、問題はありませんでした。このように:

var result = user.transactions.where(x=>x.phone == user.phone);

私がここで作成しているプロジェクトを見たい場合は、ソリューションファイルがあります:http: //mtelanalyzer.codeplex.com/

4

1 に答える 1

1

電話番号がList<String>:であると仮定します。

var result = phoneNumbers.GroupBy(pn => pn)
             .Select(grp => new { Number = grp.Key, Count = grp.Count() })
             .OrderByDescending(x => x.Count)
             .Select(x => x.Number);
  1. 電話番号でグループ化
  2. カウントで注文できる匿名タイプを選択してください
  3. 降順(発生率が最も高いものが最初)、次に番号順
  4. 数値を選択すると、結果はIEnumerable<String>(またはそれがどんなタイプでも)になります

編集:私はあなたが番号ではなくインデックスで2番目に注文しているのを見ただけです。それはそれをもう少し複雑にします:

var result = phoneNumbers.Select((pn, i) => new { Number = pn, Index = i })
             .GroupBy(x => x.Number)
             .Select(grp => new { 
                 Number = grp.Key, 
                 Count  = grp.Count(), 
                 Index  = grp.First().Index 
             })
             .OrderByDescending(x => x.Count)
             .ThenBy(x => x.Index)
             .Select(x => x.Number);

于 2012-06-29T21:20:53.903 に答える