查找行中任何单词的出现次数

时间:2014-12-09 09:09:12

标签: c# linq

我从数据库中检索了具有字符串字段" Route" .like

的记录
No1) 2101-5340-5860-4923-3948-3459
No2) 4923-6574-9090-2000-3948-3400
No3) 2101-3400-4567-4444-5434-4923

我想最后得到这个结果:

              No_of_iteration
   --------------------------
    2101           2
    5340           1
    4923           3
    5860           1
    ...           ... and the rest

我在考虑解决方案。一种方法是遍历行,将它们全部放入数组中。然后遍历数组以查找出现次数。

这个问题的其他解决方案是什么? 任何想法都表示赞赏。

4 个答案:

答案 0 :(得分:3)

考虑到您的数据是这样的: -

List<string> data = new List<string>
{
    "2101-5340-5860-4923-3948-3459",
    "4923-6574-9090-2000-3948-3400",
    "2101-3400-4567-4444-5434-4923"
};

你可以试试这个: -

var result = data.SelectMany(x => x.Split(new char[] { '-' }))
                 .GroupBy(x => x).Select(x => new { Value = x.Key, Count = x.Count() });

工作Fiddle

答案 1 :(得分:0)

您可以将字符串拆分为“ - ”,然后使用字典,其中键是字符串,值是它出现的次数。

希望有所帮助。

答案 2 :(得分:0)

基本上你需要用“ - ”拆分,然后执行简单的分组,如下所示:

var result = entities.SelectMany(x => x.Route.Split('-'))
    .GroupBy(x => x)
    .Select(x => new { Part = x.Key, No_of_iteration = x.Count() })
    .ToList();

答案 3 :(得分:0)

在您的解决方案中,您将不得不迭代1- 6000+,这对性能不利。

我建议你创建一个类

class Occurrence
{
 public static int number;
 public static int occurrence;
 ....
}

然后创建一个包含此类实例的arraylist。对于您在数据库中看到的每个数字,检查是否存在与您在数据库中看到的数字相同的次数,然后增加其中的出现值。

可能有比这更好的解决方案,我只是离开这里给你一个想法。