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

直接法が存在するかどうかはわかりませんが、このワンライナー

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

それをする必要があります。

于 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

このようなシーケンスの用語は「デカルト積」です。

これは、EricLippertによるLINQを使用したデカルト積の計算に関する長いブログです。

他の回答ですでに示されているように、タプルのシーケンスは次のコードで取得でき、(文字列の場合は結合を使用して、他のタイプの結果の場合は集計を使用して)最終的な文字列を生成します。

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

2つのシーケンスの長さが同じである場合は、おそらくEnumerable.Zipを使用できます。

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