【问题标题】:How to Count in a string array for string First letter in linq C#如何在字符串数组中计算字符串的第一个字母在linq C#中
【发布时间】:2015-05-26 17:33:19
【问题描述】:
var query = from str in strdizi
                    where str.StartsWith(str.Substring(0, 1))
                    orderby str
                    group str by str.Substring(str.LastIndexOf(Convert.ToChar(str.Substring(0, 1))))
                        into ws
                        where ws.Count() >= 1
                        select ws;
        foreach (var item in query)
        {
            Console.WriteLine(item.Key + " " + item.Count());
            foreach (var items in item)
            {
                Console.WriteLine(items);
            }
        }

但输出是;

安迪 1

安迪

亚瑟 1

亚瑟

我想要;

A - 1

安迪

亚瑟

阿什琳

感谢您的帮助。对不起我的英语不好。

【问题讨论】:

  • 您是否有特定原因必须使用 linq 执行此操作?正常的 for 循环访问和更新字典可能性能更高,更易于理解和维护......
  • ANNA的价值是什么? 1个还是4个?

标签: c# arrays linq console


【解决方案1】:

你不需要where这个条件,将数据按子串分组就足够了:

var strdizi = new string [] {"Andy", "Arthur", "Ashlynn", "Ben", "Chris"};
var query = from str in strdizi
            group str by str.Substring(0, 1 )
            into ws
            where ws.Count() >= 1
            select ws;

foreach (var item in query)
{
    Console.WriteLine(item.Key + " " + item.Count());
    foreach (var items in item)
    {
        Console.WriteLine(items);
    }
}

这给出了结果:

A 3
Andy
Arthur
Ashlynn
B 1
Ben
C 1
Chris

【讨论】:

    【解决方案2】:

    由于我更喜欢​​方法语法而不是查询语法,所以你会这样做:

    var strdizi = new string [] {"Andy", "Arthur", "Ashlynn", "Ben", "Chris"};
    var query = strdizi.GroupBy(g=>g.Substring(0,1));
    foreach (var item in query)
    {
        Console.WriteLine(item.Key + " " + item.Count());
        foreach (var items in item)
        {
            Console.WriteLine(items);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 2019-12-28
      • 2017-09-08
      相关资源
      最近更新 更多