如何获得行号?(How to get row number?)

编程入门 行业动态 更新时间:2024-10-28 16:22:25
如何获得行号?(How to get row number?)

我有DataTable ,我需要清除所有空列。 所以这是代码示例:

for (var i = 0; i < table.Columns.Count; i++) { if (table.Rows.Cast<DataRow>().All(r => string.IsNullOrWhiteSpace(r[i].ToStringOrNull()))) { table.Columns.RemoveAt(i--); } }

问题:如何在If-statement获取行号?

谢谢。

I have DataTable and i need to clear all empty columns. So here is code example:

for (var i = 0; i < table.Columns.Count; i++) { if (table.Rows.Cast<DataRow>().All(r => string.IsNullOrWhiteSpace(r[i].ToStringOrNull()))) { table.Columns.RemoveAt(i--); } }

Question : How can i get row Number in If-statement ?

Thanks.

最满意答案

如果通过“行号”表示Rows集合中Row对象的索引,则无法直接从Row对象获取该Row 。 你可以像弗拉德的评论中所建议的那样使用类似的东西:

for (var i = 0; i < table.Columns.Count; i++) { if (Enumerable.Range(0, table.Rows.Count).All( j => string.IsNullOrWhiteSpace(tables.Rows[j][i].ToStringOrNull()))) { table.Columns.RemoveAt(i--); } }

也就是说,在我看来,处理数据会更好,只能访问每一行。 这至少应该改善数据局部性,并且在某些情况下可以显着提高性能。 例如:

bool[] keepColumn = new bool[table.Columns.Count]; for (int i = 0; i < table.Rows.Count; i++) { for (int j = 0; j < table.Columns.Count; j++) { if (!keepColumn[j] && !string.IsNullOrWhiteSpace(table.Columns[j].ToStringOrNull())) { keepColumn[j] = true; } } } for (int i = table.Columns.Count - 1; i >= 0; i--) { if (!keepColumn[i]) { table.Columns.RemoveAt(i); } }

它显然有点冗长,但恕我直言,在这种情况下它是值得的,因为它在自然组织中处理数据(即表自然是具有列的行,而不是具有行的列)。

If by "row number", you mean the index of a Row object in the Rows collection, then you can't get that directly from the Row object. You can, as suggested in Vlad's comment, use something like this instead:

for (var i = 0; i < table.Columns.Count; i++) { if (Enumerable.Range(0, table.Rows.Count).All( j => string.IsNullOrWhiteSpace(tables.Rows[j][i].ToStringOrNull()))) { table.Columns.RemoveAt(i--); } }

That said, it seems to me that it would be better to process the data such that you visit each row only once. This should at the very least improve data locality, and in some scenarios could significantly improve performance. E.g.:

bool[] keepColumn = new bool[table.Columns.Count]; for (int i = 0; i < table.Rows.Count; i++) { for (int j = 0; j < table.Columns.Count; j++) { if (!keepColumn[j] && !string.IsNullOrWhiteSpace(table.Columns[j].ToStringOrNull())) { keepColumn[j] = true; } } } for (int i = table.Columns.Count - 1; i >= 0; i--) { if (!keepColumn[i]) { table.Columns.RemoveAt(i); } }

It's obviously a bit more verbose, but IMHO it would be worth it in this case, because it's processing the data in their natural organization (i.e. tables are naturally rows that have columns, as opposed to columns that have rows).

更多推荐

本文发布于:2023-07-24 10:41:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1244904.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:行号   如何获得   number   row

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!