我正在从下面的代码初始化字符串列表:
var headerValues = new Dictionary<string, List<string>>
{
{
"section1",
new List<string>()
{
"id",
"item"
}
},
{
"section2",
new List<string>()
{
"titile",
"content1",
"content2"
}
},
// and the rest of sections
};
var results = from s1 in section1Collection
from s2 in section2Collection
from s3 in section3Collection
from s4 in section4Collection
select new List<string>
{
// section1
GetValue(s1, headerValues["section1"][0]),
GetValue(s1, headerValues["section1"][1]),
// section2
GetValue(s2, headerValues["section2"][0]),
GetValue(s2, headerValues["section2"][1]),
GetValue(s2, headerValues["section2"][2]),
// and the rest of sections
};
但是必须有一种循环执行的方法,对吗?还是可以在函数中初始化结果列表?
如何以更智能,更可靠,更易读的方式生成此结果列表?
顺便说一句,GetValue方法只是从传入的标头值字符串中查找s1,s2等中的值。
编辑:我正在寻找的东西是这样的:
var results = from s1 in section1
from s2 in section2
from s3 in section3
from s4 in section4
select new List<string>
{
// GetValues should return all section1 strings based on the headerValues["section1"] array
GetValues(s1, headerValues["section1"]),
// section2
GetValues(s2, headerValues["section2"]),
// and the rest of sections
};
答案 0 :(得分:-1)
如前所述,您正在寻找的是SelectMany。它将嵌套的集合扁平化为一维的集合。这是您应该如何使用它。
var results = headerValues.SelectMany(item => item.Value);
那是什么呢?这里的“ item”是一个KeyValuePair(因为您使用的字典由它们组成),而item.Value是一个列表(因为它是此特定字典值的类型)。现在,给定的列表列表SelectMany将它们加入并作为单个IEnumerable字符串返回