2

我有以下字符串数组:

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()方法起作用,但不能:-(。

4

4 回答 4

6

I don't know that any direct method exists, but this one-liner

return 
  from a in myArray 
  from b in tTerms 
  select string.Format("{0}.{1}", b, a)

should do it.

于 2012-07-02T16:18:03.293 回答
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());
于 2012-07-02T16:19:51.280 回答
2

这种序列的术语是“笛卡尔积”

这是 Eric Lippert 关于使用 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));
于 2012-07-02T16:22:39.233 回答
-1

如果这两个序列的长度相同,您可能可以让Enumerable.Zip为您工作。

var myFinalString = myArray.Zip(mySecondArray, (f, s) => f + "." + s);
于 2012-07-02T16:21:22.633 回答