IEnumerable 中求和、平均、连接等项的实现选项

发布于 2024-07-12 12:12:24 字数 469 浏览 10 评论 0原文

我正在寻找最短的代码来创建对 IEnumerable 中的项目执行常见操作的方法。

例如:

public interface IPupil
{
    string Name { get; set; }
    int Age { get; set; }
}
  1. 对属性求和 - 例如 IEnumerable中的 IPupil.Age
  2. 平均属性 - 例如 IEnumerable中的 IPupil.Age
  3. 构建 CSV 字符串 - 例如 IEnumerable中的 IPupil.Name

我对解决这些示例的各种方法感兴趣:foreach(长手)、委托、LINQ、匿名方法等...

抱歉措辞不佳,我无法准确描述我所追求的内容!

I'm looking for the shortest code to create methods to perform common operations on items in an IEnumerable.

For example:

public interface IPupil
{
    string Name { get; set; }
    int Age { get; set; }
}
  1. Summing a property - e.g. IPupil.Age in IEnumerable<IPupil>
  2. Averaging a property - e.g. IPupil.Age in IEnumerable<IPupil>
  3. Building a CSV string - e.g. IPupil.Name in IEnumerable<IPupil>

I'm interested in the various approaches to solve these examples: foreach (long hand), delegates, LINQ, anonymous methods, etc...

Sorry for the poor wording, I'm having trouble describing exactly what I'm after!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

各自安好 2024-07-19 12:12:24

求和与平均:使用 LINQ 轻松实现:

var sum = pupils.Sum(pupil => pupil.Age);
var average = pupils.Average(pupil => pupil.Age);

构建 CSV 字符串 - 这里有各种选项,包括编写您自己的扩展方法。 但这是可行的:

var csv = string.Join(",", pupils.Select(pupil => pupil.Name).ToArray());

请注意,使用普通 LINQ 在一次传递数据中计算多个事物(例如平均总和)是很棘手的。 如果您对此感兴趣,请查看 Push LINQ 项目是我和 Marc Gravell 编写的。 但这是一个非常特殊的要求。

Summing and averaging: easy with LINQ:

var sum = pupils.Sum(pupil => pupil.Age);
var average = pupils.Average(pupil => pupil.Age);

Building a CSV string - there are various options here, including writing your own extension methods. This will work though:

var csv = string.Join(",", pupils.Select(pupil => pupil.Name).ToArray());

Note that it's tricky to compute multiple things (e.g. average and sum) in one pass over the data with normal LINQ. If you're interested in that, have a look at the Push LINQ project which Marc Gravell and I have written. It's a pretty specialized requirement though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文