|
2018/05/01(Tue) 15:30:05 編集(投稿者)
あぁ、質問の内容を読み違えてました。
引数として { "A", "B" } と {"X", "Y", "Z"} を渡した場合に 得たい結果は { "AX", "BY", "Z" } ではなく、 { "AX", "AY", "AZ", "BX", "BY", "BZ" } なのですね。
以下は { "AX", "BY", "Z" } を得るための物なので読み捨ててください。
■No87239 (夜叉丸 さん) に返信 > lst.Add(s0[il0] + s1[il1]); これだと、 "AB" + "C" の場合と "A" + "BC" の場合が区別できなくなりそうですが、それは構わないのですね?
> strlst の配列数の分だけfor文を繰り返して結果を返したいのですが > どのようにすればよいのかわかりません。 > private List<string> makestring(string[] s0, string[] s1) > { 件数が一致しない場合、すなわち s0.Length != s1.Length だった場合は、 どのような結果を返してほしいのでしょうか?
> private List<string> makestring(prams List<string>[] strlst) prams というのは params のことだと思いますが、上記の場合の呼び出しは var result1 = makestring( new string[] { "A", "B" }, new string[] {"X", "Y"} ); ではなく、 var result2 = makestring(new List<string>() { "A", "B" }, new List<string>() { "X", "Y" }); になりますが、それは構わないのでしょうか。
個人的には private List<string> makestring(params IEnumerable<string>[] strlst) の方が良いのかな…とも思って書き換えてみました。 これなら上記 result1、result2 両方に対応できます。
private /* static */ List<string> makestring(params IEnumerable<string>[] strlst) { int maxIndex = strlst.Max(p => p.Count()); List<string> lst = new List<string>(Enumerable.Repeat("", maxIndex)); foreach (var items in strlst) { int i = 0; foreach (var str in items) { lst[i++] += str; } } return lst; }
|