【发布时间】:2017-09-30 02:28:35
【问题描述】:
我有两个IEnumerables:
IEnumerable<string> first = ...
IEnumerable<string> second = ...
我想创建第二个IEnumerable<string>,它是每个IEnumerable 的每个元素的串联。
例如:
IEnumerable<string> first = new [] {"a", "b"};
IEnumerable<string> second = new [] {"c", "d"};
foreach (string one in first)
{
foreach (string two in second)
{
yield return string.Format("{0} {1}", one, two);
}
}
这会产生:
"a c"; "a d"; "b c"; "b d";
问题是,有时两个IEnumerables 之一是空的:
IEnumerable<string> first = new string[0];
IEnumerable<string> second = new [] {"c", "d"};
在这种情况下,嵌套的foreach 构造永远不会到达yield return 语句。当IEnumerable 为空时,我希望结果只是非空IEnumerable 的列表。
我怎样才能产生我正在寻找的组合?
编辑:
实际上,我尝试组合三个不同的IEnumerables,因此为空IEnumerable 的每个可能排列添加if 条件似乎很糟糕。如果这是唯一的方法,那么我想我必须这样做。
【问题讨论】:
-
查看 Zip linq 运算符。它需要两个枚举并允许您遍历两者。如果尺寸不同,请考虑到这一点。
-
@JohnPeters 他没有压缩序列。
-
“当任一 IEnumerable 为空时,我希望结果只是非空 IEnumerable 的列表”然后您应该在循环之前处理这种情况。
-
使用索引,如果 zip 不适合你。
-
为了清楚起见,您能否在问题中包含
first为空和second为空的示例输出。
标签: c#