我有以下字符串数组:
var myArray1 = new string[] {"A", "B", "C"};
var myArray2 = new string[] {"t1", "t2"};
我希望能够生成一个如下所示的最终字符串:
var myFinalString = "t1.A, t2.A, t1.B, t2.B, t1.C, t2.C";
我知道我可以迭代遍历数组的每个元素并手动构建字符串。但是,我想知道是否有更好的方法。我试图找出如何使String.Join()
方法工作,但不能: - (。
答案 0 :(得分:6)
我不知道存在任何直接方法,但是这个单行
return
from a in myArray
from b in tTerms
select string.Format("{0}.{1}", b, a)
应该这样做。
答案 1 :(得分:4)
这有效:
var query = from x in new[]{"A", "B", "C"}
from y in new[]{"t1", "t2"}
select y + "." + x;
var result = string.Join(", ", query.ToArray());
答案 2 :(得分:2)
此类序列的术语是"Cartesian Product"。
以下是Eric Lippert关于Computing a Cartesian Product with LINQ
的漫长博客正如在其他答案中已经显示的那样,元组的序列可以通过以下代码获得,而不是聚合(在字符串的情况下使用Join,或者对于其他类型的结果使用Aggregate)来生成最终的字符串:
var product =
from first in s1
from second in s2
select new[] { first, second };
var result String.Join(", ",
product.Select(p => String.Format("{0}.{1}", p.first, p.second));
答案 3 :(得分:-1)
如果这两个序列的长度相同,您可能会Enumerable.Zip为您工作。
var myFinalString = myArray.Zip(mySecondArray, (f, s) => f + "." + s);