【发布时间】:2016-07-02 11:10:00
【问题描述】:
我有一个二维对象数组如下:
object[,] twoDimensionalArray = new object[,]
{
new object[] {"columnHeader1", 1, 2, 3},
new object[] {"columnHeader2", 4, 5, 6},
new object[] {"columnHeader3", 7, 8, 9}
};
假设我有一堂课如下:
public class MyCustomObject
{
public string ColumnHeader{get;set;}
public int ValueOne{get;set;}
public int ValueTwo{get;set;}
public int ValueThree{get;set;}
}
知道我可能要处理数千行可能有一百列,那么将我的 twoDimensionalArray 变量映射到列表的最快和最有效的方法是什么?
有明显的 for 循环,但我猜有更好的方法。
感谢阅读。
【问题讨论】:
-
我会使用
yield return来限制内存消耗。但这取决于您要在消费者方面做什么。 -
只需
.Select(x => new Whatever { SomeDumbProperty = x.WhoCares });并继续前进。 Linq 永远是最好的答案。如果有人告诉你不是这样,那就打他们愚蠢的下巴。 -
我有一个二维数组的对象你看......你已经有一个问题......你很幸运你没有有一个正则表达式的二维数组...然后你会遇到两个问题:-)。通常不要在 .NET 中使用多维数组。 .NET 并不真正支持它们。它们只是在那里生存下来,因为它们无法被移除,而且年轻的程序员可以通过这种方式使用它们。
-
等等……这是锯齿数组还是二维数组?因为你在那里混合了符号......如果它是一个锯齿状数组,那么一切都很好(你只需将
object[,] twoDimensionalArray = new object[,]更改为object[][] twoDimensionalArray = new object[][]。 -
如果您可以将输入数组修改为二进制序列化为字节[],您将能够将类更改为结构并在其上使用
[StructLayout(LayoutKind.Sequential, Pack = 1)]。然后在不安全的上下文中,您将使用(MyCustomObject*)yourSerializedData。但是我不知道字符串是如何物理存储在 C# 中的。
标签: c# arrays performance list type-conversion