0

我正在为我的工作制作一个项目,但有一个大问题......我正在制作一个从 CSV(逗号分隔值)文件中获取用户信息的软件。每个用户都有自己的电话号码和他被呼叫的号码。当从文件中收集信息时,我想获取一个数字的所有电话号码并将它们升序排序。我不想成为所有电话号码的出现,只是这个有很大的持续时间。这意味着:

1-345345-9375683027
2-345345-3070982743
3-345345-9375683027
4-345345-3070982743
5-345345-9375683027
6-345345-23894459734
8-7529344

数字 1、3 和 5 是相等的。数字 2 和 4 相等。我想像这样对数字进行排序:

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

现在 1 我们是最常见的,2 是第一个不太常见,所以一个......我尝试了任何事情但没有问题。像这个:

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>(或任何类型)

编辑:我刚刚看到您不是按数字而是按索引排序的。这使得它有点复杂:

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 回答