C#でIEnumerableの置換(繰り返し)関数を作成しようとしています。 私はすでに配列を使っている関数を持っています。整数を基にしたIEnumerableを使った繰り返しの置換
public IEnumerable<IEnumerable<T>> GetPermsWithReps<T>(IEnumerable<T> items, int count)
{
foreach (var item in items)
{
if (count == 1)
{
yield return new T[] { item };
}
else
{
foreach (var result in GetPermsWithReps(items, count - 1))
{
yield return new T[] { item }.Concat(result);
}
}
}
}
そして、それはかなりうまく動作します...しかし は、今私はストレートの整数ではなく、アレイ上で動作しますIEnumerableを機能させる必要があります。だから私はそれを好きなように呼んでいます。
GetPermsInts(max_val = 1, digits_num = 2)
出力する必要があります。
00
01
10
11
私はそれを達成するために多くの方法でその機能を変更しようとしませんが、まだ運... は、誰かが私を助けることができるしてください?
したがって、値が与えられたときに、ゼロとその数値の間のすべての可能な値のシーケンスを作成する方法を理解する必要があります。既存のLINQメソッドを見て、これを行うメソッドがあるかどうかを調べることができます(ヒント:*正確に*これを行うメソッドがあります)。それは非常に複雑な関数ではありません。 – Servy
@Servy実際には、すべての可能な値をダンプする関数を書くことはできますが、問題は全部欲しくないということです。これらのレコードのうちの3つが条件を満たすと、私はIEnumerableを使用しています(各サイクルの後にレコードをチェックすることができるからです)。そして、配列をベースパラメータとしてもう使用したくありません。なぜなら、配列に可能なすべての数字を最初にダンプする必要があるからです。時間と記憶の浪費)。あなたはなにか考えはありますか ? – LOLOLOLO
それ自身でシーケンスのすべての置換を含むシーケンスを作成しようとしているときに、その中に '0'と' 1'を含むシーケンスを作成すると、コストがかかりません。あなたは 'n! '複雑さで操作を実行しています。サイズ「n」の入力シーケンスを作成することは決して重要ではない。 – Servy