将两个锯齿状列表合并为一个
Combine two jagged lists into one
我有两个参差不齐的列表。
第一个:
List<List<string>> firstList = new List<List<string>>();
{ dd ff }
{ dd ff }
{ dd ff }
第二个:
List<List<string>> secondList = new List<List<string>>();
{ gg hh }
{ gg uu }
{ hh uu }
我在将两个列表合并为一个列表时遇到问题:
{ dd ff gg hh }
{ dd ff gg uu }
{ dd ff hh uu }
任何连接尝试都只会添加 secondList
个元素,就像另一个 firstList
行一样:
{ dd ff }
{ dd ff }
{ dd ff }
{ gg hh }
{ gg uu }
{ hh uu }
如果您对此有任何帮助,我们将不胜感激!
您可以使用 Zip
来连接相应的子列表。
var combined = firstList.Zip(secondList, (f,s) => f.Concat(s).ToList()).ToList();
请注意,如果两个列表包含不同数量的子列表,则结果将只包含两个列表中较短的一个。
这里的重要思想是您必须连接列表的每个元素,而不是连接两个列表。
连接每个元素:
{ dd ff gg hh } //each element dd ff is concatted with gg hh
{ dd ff gg uu }
{ dd ff hh uu }
合并列表:
{ dd ff }
{ dd ff }
{ dd ff } //elements from the 1st list
----------- concated with
{ gg hh }
{ gg uu }
{ hh uu } //elements from the 2nd list
您可以 Concat
列表中的每个元素(它们必须具有相同数量的元素,或者第二个元素比第一个 多 数量),如下所示:
List<List<string>> finalList = (from x in firstList
join y in secondList
on firstList.IndexOf(x) equals secondList.IndexOf(y)
select x.Concat(y).ToList()).ToList();
或者任何其他想做的方式。
您可以使用属于 System.Linq
命名空间的 Zip 扩展方法。元组可用于关联两个列表中的值。或者你可以 Concat
内部列表。
var list1 = new List<List<string>>
{
new List<string> { "dd", "ff" },
new List<string> { "dd", "ff" },
new List<string> { "dd", "ff" },
};
var list2 = new List<List<string>>
{
new List<string> { "gg", "hh" },
new List<string> { "gg", "uu" },
new List<string> { "hh", "uu" },
};
var result = list1.Zip(list2, (l1, l2) => Tuple.Create(l1, l2)).ToList();
另一种选择是遍历第一个列表并添加第二个列表中的元素。例如:
var list1 = new List<List<string>> {
new List<string> { "dd", "ff" },
new List<string> { "dd", "ff" },
new List<string> { "dd", "ff" }};
var list2 = new List<List<string>> {
new List<string> { "gg", "hh" },
new List<string> { "gg", "uu" },
new List<string> { "hh", "uu" }};
for(var j = 0; j < list1.Count(); j++)
{
list1[j].AddRange(list2[j]);
}
我有两个参差不齐的列表。
第一个:
List<List<string>> firstList = new List<List<string>>();
{ dd ff }
{ dd ff }
{ dd ff }
第二个:
List<List<string>> secondList = new List<List<string>>();
{ gg hh }
{ gg uu }
{ hh uu }
我在将两个列表合并为一个列表时遇到问题:
{ dd ff gg hh }
{ dd ff gg uu }
{ dd ff hh uu }
任何连接尝试都只会添加 secondList
个元素,就像另一个 firstList
行一样:
{ dd ff }
{ dd ff }
{ dd ff }
{ gg hh }
{ gg uu }
{ hh uu }
如果您对此有任何帮助,我们将不胜感激!
您可以使用 Zip
来连接相应的子列表。
var combined = firstList.Zip(secondList, (f,s) => f.Concat(s).ToList()).ToList();
请注意,如果两个列表包含不同数量的子列表,则结果将只包含两个列表中较短的一个。
这里的重要思想是您必须连接列表的每个元素,而不是连接两个列表。
连接每个元素:
{ dd ff gg hh } //each element dd ff is concatted with gg hh { dd ff gg uu } { dd ff hh uu }
合并列表:
{ dd ff } { dd ff } { dd ff } //elements from the 1st list ----------- concated with { gg hh } { gg uu } { hh uu } //elements from the 2nd list
您可以 Concat
列表中的每个元素(它们必须具有相同数量的元素,或者第二个元素比第一个 多 数量),如下所示:
List<List<string>> finalList = (from x in firstList
join y in secondList
on firstList.IndexOf(x) equals secondList.IndexOf(y)
select x.Concat(y).ToList()).ToList();
或者任何其他想做的方式。
您可以使用属于 System.Linq
命名空间的 Zip 扩展方法。元组可用于关联两个列表中的值。或者你可以 Concat
内部列表。
var list1 = new List<List<string>>
{
new List<string> { "dd", "ff" },
new List<string> { "dd", "ff" },
new List<string> { "dd", "ff" },
};
var list2 = new List<List<string>>
{
new List<string> { "gg", "hh" },
new List<string> { "gg", "uu" },
new List<string> { "hh", "uu" },
};
var result = list1.Zip(list2, (l1, l2) => Tuple.Create(l1, l2)).ToList();
另一种选择是遍历第一个列表并添加第二个列表中的元素。例如:
var list1 = new List<List<string>> {
new List<string> { "dd", "ff" },
new List<string> { "dd", "ff" },
new List<string> { "dd", "ff" }};
var list2 = new List<List<string>> {
new List<string> { "gg", "hh" },
new List<string> { "gg", "uu" },
new List<string> { "hh", "uu" }};
for(var j = 0; j < list1.Count(); j++)
{
list1[j].AddRange(list2[j]);
}