Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Group By和Count从Java转换为C#_C#_Linq - Fatal编程技术网

将Group By和Count从Java转换为C#

将Group By和Count从Java转换为C#,c#,linq,C#,Linq,对于一个有经验的C#程序员(我有Java背景),我偶然发现了一个新问题。想象一下以下Java POJO: public class Person { private final String firstName; private final String lastName; Person(final String firstName, final String lastName) { this.firstName = firstName;

对于一个有经验的C#程序员(我有Java背景),我偶然发现了一个新问题。想象一下以下Java POJO:

public class Person {
    private final String firstName;
    private final String lastName;

    Person(final String firstName, final String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}
如果我有一个
列表
,想按姓氏分组,然后计算每个姓氏的值,我会在Java中执行类似的操作:

final List<Person> people = Arrays.asList(
        new Person("John", "Doe"),
        new Person("Jim", "Doe"),
        new Person("Johnny", "Puma"));

final Map<String, Long> map =
        people.stream().collect(
                Collectors.groupingBy(
                        Person::getLastName,
                        Collectors.counting()));
然后分组:

IEnumerable<Person> people = new Person[]
{
    new Person {FirstName = "John", LastName = "Doe"},
    new Person {FirstName = "Jim", LastName = "Doe"},
    new Person {FirstName = "Johnny", LastName = "Puma"}
};

// This is what could surely be improved
var map = people.GroupBy(p => p.LastName)                
    .ToDictionary(g => g.Key, g => g.Count());
IEnumerable people=新人[]
{
新人{FirstName=“John”,LastName=“Doe”},
新人{FirstName=“Jim”,LastName=“Doe”},
新人{FirstName=“约翰尼”,LastName=“彪马”}
};
//这当然是可以改进的
var map=people.GroupBy(p=>p.LastName)
.ToDictionary(g=>g.Key,g=>g.Count());
这与Java案例中的工作方式相同。但是,这是C#的做事方式还是有其他首选的解决方案/风格


来自Java生态系统,我以前没有使用C#的经验,我只是想从一开始就把它做好,所以如果这个问题很琐碎或者需要澄清,请原谅。

实际上取决于您打算如何使用这些值。在您的情况下,您将需要在该字典中迭代以获得这些结果,这样您就可以跳过该传统部分

在以下情况下,您可以跳过最后一部分(调用字典):

将打印:

能源部2

美洲狮1

测试


将始终是您在
GroupBy
中选择的属性,通过在该
变量中迭代,可以使用已分组的用户。就我而言,我只是像你一样
Count()

我看不出有什么问题;它清晰而简洁。你应该标记/突出你在回答中期望的技术,而不是那些你已经可以在问题中搜索的技术。谢谢。我只是想知道相反的情况。
IEnumerable<Person> people = new Person[]
{
    new Person {FirstName = "John", LastName = "Doe"},
    new Person {FirstName = "Jim", LastName = "Doe"},
    new Person {FirstName = "Johnny", LastName = "Puma"}
};

// This is what could surely be improved
var map = people.GroupBy(p => p.LastName)                
    .ToDictionary(g => g.Key, g => g.Count());
    var group = people.GroupBy(p => p.LastName);

    foreach(var p in group)
    {
        Console.WriteLine(p.Key + " " + p.Count());
    }