1

一部のラテックス テーブル生成コードをモジュール化しようとしています。大量の金メッキです。

var MIDRULE = @"\\\midrule";

var a = new []{new []{"a", "b", "c"}, new []{"1", "2", "3"}, new []{"alpha", "beta", "gamma"}};

a.Dump();

a.Aggregate(
        (x,y) => x.Aggregate((i,j) => i + "&" + j) 
           + MIDRULE + Environment.NewLine
           + y.Aggregate((k,l)=>k+"&"+l)).Dump();

期待される結果:

a&b&c\\\midrule
1&2&3\\\midrule
alpha&beta&gamma\\\midrule

実結果:

Cannot implicitly convert type 'string' to 'string[]'

可能であれば、集約コマンドの 1 つのライナーでこれを実行したいと考えています。これは、ネストされたループまたは他のさまざまな方法で既に実行できます。集約をよりよく知ることに興味があります。

4

2 に答える 2

3

試す:

string.Concat(a.Select(inner => string.Join("&", inner)
                                + MIDRULE + Environment.NewLine))
      .Dump();

最後の文字列を含むすべての文字列に追加するJoin必要があるため、外部呼び出しに使用しないように注意してください。MIDRULE + Environment.NewLine

編集

ここで使用することに熱心なので(Aggregate読みにくく、効率が悪いのでお勧めしません)、次のことを試してください (未テスト):

a.Aggregate(string.Empty, (x, y) => x 
                                  + y.Aggregate(string.Empty,
                                                (k, l) => k + "&" + l) 
                                  + MIDRULE 
                                  + Environment.NewLine)
 .Dump();
于 2012-10-02T02:43:02.700 に答える
1

Aggregate を間違って使用しているためです。Aggregateの定義を見ると、定義が次のようになっていることがわかります。

public static TSource Aggregate<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, TSource, TSource> func
)

ジェネリックは 1 つの型しかとらないため、暗黙的に Aggregate を呼び出していることがわかります。これは、関数のパラメーターがすべて string[] でなければならないことを意味します。型文字列をパラメータとして使用しようとすると、期待される出力がコンパイル エラーになります。

私の頭の上からこれを行う1つの方法は

string.Join( MIDRULE + Environment.NewLine, a.Select(x => string.Join( "&", x))).Dump();

末尾の MIDRULE 改行が不要で、すでに推奨されている

これがこれにアプローチする最良の方法であるかどうかはわかりませんが、うまくいくはずです。

string.Concat(a.Select(inner => string.Join("&", inner)
                            + MIDRULE + Environment.NewLine))
  .Dump();

もしそうなら。

于 2012-10-02T03:00:56.897 に答える