【问题标题】:Count of properties in a collection of objects对象集合中的属性计数
【发布时间】:2017-02-27 10:53:37
【问题描述】:

我正在努力解决这个问题。

我有一个类可以存储电子表格中每个单元格的单元格信息。

public class Datacollection 
{
    public int rowNumber { get; set; }
    public string colName { get; set; }
    public string colValue { get; set; }
}

然后我在其他地方加载一个 Excel 电子表格作为这些对象的集合

private static List<Datacollection> _dataCol = new List<Datacollection>();

我正在加载的电子表格有 3 列和 3000 行,因此我的集合大小为 9000。电子表格中的每个单元格对应一个 Datacollection 对象。

如何从该集合中获取行号计数?我想我需要 'rowNumber' 的最高值,但我不确定如何取回这个值。

非常感谢,

【问题讨论】:

  • _dataCol.Count() 会给出项目数。 _dataCol.Max(x=&gt;x.rowNumer) 将给出最大行数
  • 除了您现在收到的答案之外,现在是了解 .NET 命名约定并开始遵循它们的好时机。 (我还建议将存储单元信息的东西命名为CellCellInformation 或类似名称,而不是Datacollection。)

标签: c# list collections count


【解决方案1】:

如果行号是连续的并且从1开始,你可以简单地使用LINQ的Max扩展:

var rowCount = _dataCol.Max(cell => cell.rowNumber);

但如果它们确实从任意数字而不是 1 开始,或者行号之间存在间隙,则您需要找到 distinct 行号的计数:

var rowCount = _dataCol.Select(cell => cell.rowNumber).Distinct().Count();

如果您确定每一行都有正好三列,那么更快的方法当然是var rowCount = _dataCol.Count / 3;

【讨论】:

  • 不会 rowCount 只是 _dataCol.Count 吗?为什么我们需要除以 3?
  • @AdityaKorti 因为_dataCol 每个单元格包含一个元素。所以_dataCol.Count不仅仅是行数,而是行数乘以列数。
  • 我以为是排。每个单元格一个对象实际上没有任何意义。
【解决方案2】:

要获取rowNumber 的最大值,可以使用LinQ:

var rowCount = _dataCol.Max(x => x.rowNumber);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多