我有一个使用以下模型的应用程序:
namespace myapp.Models.Types
{
public class PressureRowT
{
public System.DateTime Timestamp { get; set; }
public int P1{ get; set; }
public int P2{ get; set; }
public int P3{ get; set; }
public int P4{ get; set; }
public int P5{ get; set; }
}
}
我有一个List
[Timestamp: [date1, date2, date3... daten], P1: [val1, val2, val3, ..., valn], P2: [val1, val2, val3, ..., valn] ... P5: [val1, val2, val3, ..., valn]]
“反转”结构的最有效方法是什么?
谢谢。
答案 0 :(得分:0)
假设现在您有一个PressureRowT列表,并且想要一个对象内部包含列表的PressureRowT,则可以使用
var Timestamps = pressureRowTList.Select(pressureRowT => pressureRowT.TimeStamp).ToList();
将每个字段都分配给一个对象。
答案 1 :(得分:0)
最有效的方法是重新编写解析代码,以在读取文件时构建正确的结构。
除非如此,否则最好不要使用LINQ,而只需构建所需的List
。处理for
时,foreach
循环比List
更有效:
var src = new List<PressureRowT>();
var srccount = src.Count;
var PR_TS = new List<DateTime>(srccount);
var PR_P1 = new List<int>(srccount);
var PR_P2 = new List<int>(srccount);
var PR_P3 = new List<int>(srccount);
var PR_P4 = new List<int>(srccount);
var PR_P5 = new List<int>(srccount);
for (int j1 = 0; j1 < srccount; ++j1) {
PR_TS.Add(src[j1].Timestamp);
PR_P1.Add(src[j1].P1);
PR_P2.Add(src[j1].P2);
PR_P3.Add(src[j1].P3);
PR_P4.Add(src[j1].P4);
PR_P5.Add(src[j1].P5);
}
var ans = new { Timestamp = PR_TS, P1 = PR_P1, P2 = PR_P2, P3 = PR_P3, P4 = PR_P4, P5 = PR_P5 };
答案 2 :(得分:0)
我可能使用Aggregate
来建立结果对象:
IEnumerable<PressureRowT> values;
var resultSeed = new {
Timestamp = new List<DateTime>(),
P1 = new List<int>(),
P2 = new List<int>(),
P3 = new List<int>(),
P4 = new List<int>(),
P5 = new List<int>(),
};
return values.Aggregate(
resultSeed,
(result, value) => {
result.Timestamp.Add(value.Timestamp);
result.P1.Add(value.P1);
result.P2.Add(value.P2);
result.P3.Add(value.P3);
result.P4.Add(value.P4);
result.P5.Add(value.P5);
return result;
});