2

順列のリストを使用する関数は次のとおりです。

public static IEnumerable<IEnumerable<T>> Permute<T>(IEnumerable<T> list)
        {
            if (list.Count() == 1)
                return new List<IEnumerable<T>> { list };

            return list.Select((a, i1) => Permute(
                            list.Where((b, i2) => i2 != i1)).Select(
                                    b => (new List<T> { a }).Union(b))
                            ).SelectMany(c => c);
        }

次の方法で使用します。

var SFP_vars = Permute(SFP);

SFP はバイト配列です。

byte[] SFP = new byte[7] { 0, 1, 2, 3, 4, 5, 6 };

他の変数があります:

List<byte[]> lst_SFP = new List<byte[]>();

今私の質問: SFP_vars の値を lst_SFP に割り当てる方法は? lst_SFP = SFP_vars.ToList()動作しません。

4

4 に答える 4

1
lst_SFP = SFP_vars.Select(bytePermutation => bytePermutation.ToArray()).ToList()

基本的に、リスト内のものをバイト配列にしたいので、Selectステートメントはそれを処理し、IEnumerable<byte[]>.
次にToList、それをリストにします。

bytePermutationどんな名前でもかまいませんが、何が起こっているのかがわかるように名前を付けただけです。

于 2013-04-12T10:28:58.337 に答える
1

byte内部列挙型も配列に変換する必要があります。

lst_SFP = SFP_vars.Select(x => x.ToArray()).ToList();
于 2013-04-12T10:29:21.627 に答える
1

SFP_vars はIEnumerable<IEnumerable<byte>>ではなく のように見えますIEnumerable<byte[]>

IEnumerable<byte>これは、最初にオブジェクトをbyte[]ToArray() メソッドを使用するように変換する必要があることを意味します。その後、それらをリストに追加できます。

同じことになりますが、次の LINQ クエリに置き換えることができます。

List<byte[]> lst_SFP = SFP_vars.Select(ie => ie.ToArray()).ToList();

お役に立てれば。

于 2013-04-12T10:31:54.767 に答える
0

内部を配列に変換する必要があります。IEnumerable<byte>これは を使用して実行できます.Select()。これが完了.ToList()すると、 として返されますList<byte[]>

var SFP = new byte[7] { 0, 1, 2, 3, 4, 5, 6 };
var SFP_vars = Permute(SFP);
var lst_SFP = SFP_vars
    .Select(e => e.ToArray())
    .ToList();

ただし、特定の順序が必要でない限り、List<IEnumerable<byte>>. これを使用すると、 Array.Copyが防止されます。

于 2013-04-12T10:32:18.750 に答える