将Group By和Count从Java转换为C#
对于一个有经验的C#程序员(我有Java背景),我偶然发现了一个新问题。想象一下以下Java POJO:将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;
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());
}