csv 到 xml 和 lambda 表达式
csv to xml and lambda expressions
我有以下代码将 csv 转换为 XML。
var xml = new XElement("root",
lines.Where((line, index) => index > 0).Select(line => new XElement("TEST",
line.Split(',').Select((column, index) => new XElement(headers[index], column)))))
我确实了解了这里的大局。正如我得到每一行的作用但我不明白为什么使用(行,索引)这样的部分。这是否意味着当索引>0 时,它会将行设置为相应的值?
如果有人能帮我分解一下,我将不胜感激。如果不使用 lambda 表达式会很棒。
首先,真正如果你缩进得更清楚会有所帮助:
var xml = new XElement("root",
lines.Where((line, index) => index > 0) // Skips first line
.Select(line => new XElement("TEST",
line.Split(',')
.Select((column, index) => new XElement(headers[index], column)))))
在 Visual Studio 中,我可能会使用更多水平 space,将 line.Split
与 new XElement("TEST")
.
放在同一行
现在,任何采用 lambda 的 Where
或 Select
调用,例如 (value, index)
,每个项目都会收到两条信息:
- 价值本身
- 序列中的索引
所以.Where((line, index) => index > 0
就是"ignore the first line"。写成.Skip(1)
.
会更清楚
接下来,.Select((column, index) => new XElement(headers[index], column))
获取每一列,并创建一个元素,其中相应的 header 作为元素名称,column
作为值。就个人而言,我会使用 Zip
来写这个,留下:
var xml = new XElement("root",
lines.Skip(1)
.Select(line => new XElement("TEST",
line.Split(',')
.Zip(headers, (value, header) => new XElement(header, value)))))
我有以下代码将 csv 转换为 XML。
var xml = new XElement("root",
lines.Where((line, index) => index > 0).Select(line => new XElement("TEST",
line.Split(',').Select((column, index) => new XElement(headers[index], column)))))
我确实了解了这里的大局。正如我得到每一行的作用但我不明白为什么使用(行,索引)这样的部分。这是否意味着当索引>0 时,它会将行设置为相应的值?
如果有人能帮我分解一下,我将不胜感激。如果不使用 lambda 表达式会很棒。
首先,真正如果你缩进得更清楚会有所帮助:
var xml = new XElement("root",
lines.Where((line, index) => index > 0) // Skips first line
.Select(line => new XElement("TEST",
line.Split(',')
.Select((column, index) => new XElement(headers[index], column)))))
在 Visual Studio 中,我可能会使用更多水平 space,将 line.Split
与 new XElement("TEST")
.
现在,任何采用 lambda 的 Where
或 Select
调用,例如 (value, index)
,每个项目都会收到两条信息:
- 价值本身
- 序列中的索引
所以.Where((line, index) => index > 0
就是"ignore the first line"。写成.Skip(1)
.
接下来,.Select((column, index) => new XElement(headers[index], column))
获取每一列,并创建一个元素,其中相应的 header 作为元素名称,column
作为值。就个人而言,我会使用 Zip
来写这个,留下:
var xml = new XElement("root",
lines.Skip(1)
.Select(line => new XElement("TEST",
line.Split(',')
.Zip(headers, (value, header) => new XElement(header, value)))))