简体   繁体   English

如何在linq C#中计算字符串的字符串数组中的第一个字母

[英]How to Count in a string array for string First letter in linq C#

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);
            }
        }

but the output is; 但是输出是

Andy 1 安迪1

Andy 安迪

Arthur 1 亚瑟1

Arthur 亚瑟

I want ; 我想要 ;

A - 1 A-1

Andy 安迪

Arthur 亚瑟

Ashlynn 阿什琳

Thanks for helping. 感谢您的帮助。 Sory for my bad english. 对不起,我的英语不好。

You don't need the where condition, it is enough to group the data by substring: 您不需要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);
    }
}

This gives the results: 结果如下:

A 3
Andy
Arthur
Ashlynn
B 1
Ben
C 1
Chris

As I prefer the method syntax over query syntax, this is how you would do it: 因为我更喜欢方法语法而不是查询语法,所以这是您要这样做的方式:

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);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM