下面是我使用排列列表的函数:
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()不起作用。
发布于 2013-04-12 18:29:22
您还需要将内部枚举数转换为byte数组:
lst_SFP = SFP_vars.Select(x => x.ToArray()).ToList();发布于 2013-04-12 18:28:58
lst_SFP = SFP_vars.Select(bytePermutation => bytePermutation.ToArray()).ToList()基本上,您希望列表中的内容是一个字节数组,所以Select语句会处理它,给您一个IEnumerable<byte[]>。
然后我们对其执行ToList,使其成为一个列表。
bytePermutation可以被命名为任何名称,我只是这样命名的,这样你就可以对发生了什么有一个概念。
发布于 2013-04-12 18:31:55
SFP_vars看起来更像是IEnumerable<IEnumerable<byte>>而不是IEnumerable<byte[]>。
这意味着您首先需要使用ToArray()方法将IEnumerable<byte>对象转换为byte[]。然后可以将它们添加到列表中。
尽管它等同于相同的东西,但您可以替换为下面的LINQ查询:
List<byte[]> lst_SFP = SFP_vars.Select(ie => ie.ToArray()).ToList();希望这能有所帮助。
https://stackoverflow.com/questions/15968978
复制相似问题