我有一个二维对象数组,如下所示:
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变量映射到List的最快最有效的方法是什么?
有明显的for循环,但我猜有更好的方法。
感谢阅读。
答案 0 :(得分:2)
嗯,你要求的是最快最有效的方式。
好的'for循环是最快的。毫无疑问。但是你仍然需要用实际数据来衡量。
两种选择:
object[,] array = new object[,]
{
{"columnHeader1", 1, 2, 3},
{"columnHeader2", 4, 5, 6},
{"columnHeader3", 7, 8, 9}
};
int i, maxI = array.GetLength(0);
List<MyCustomObject> output = new List<MyCustomObject>();
// 1 - plain old for
for(i = 0; i < maxI; i++) {
var obj = new MyCustomObject {
ColumnHeader = (string)array[i,0],
ValueOne = (int)array[i,1],
ValueTwo = (int)array[i,2],
ValueThree = (int)array[i,3]
};
output.Add(obj);
}
Console.WriteLine(output[0].ColumnHeader);
Console.WriteLine(output[2].ValueThree);
// 2 - just the same, with Linq. If you need streaming,
// linq lets you return the IEnumerable so you can
// do foreach on it
output = Enumerable.Range(0, array.GetLength(0))
.Select(idx => new MyCustomObject {
ColumnHeader = (string)array[idx,0],
ValueOne = (int)array[idx,1],
ValueTwo = (int)array[idx,2],
ValueThree = (int)array[idx,3]
}).ToList();