一尘不染

如何获得数组的所有子集?

c#

给定一个数组: [dog, cat, mouse]

什么是最优雅的创建方式:

[,,]
[,,mouse]
[,cat,]
[,cat,mouse]
[dog,,]
[dog,,mouse]
[dog,cat,]
[dog,cat,mouse]

我需要使用它来处理任何大小的数组。

这本质上是一个二进制计数器,其中数组索引表示位。据推测,这使我可以使用按位操作进行计数,但是我看不到将其转换为数组索引的好方法。


阅读 469

收藏
2020-05-19

共1个答案

一尘不染

 string[] source = new string[] { "dog", "cat", "mouse" };
 for (int i = 0; i < Math.Pow(2, source.Length); i++)
 {
     string[] combination = new string[source.Length];
     for (int j = 0; j < source.Length; j++)
     {
         if ((i & (1 << (source.Length - j - 1))) != 0)
         {
             combination[j] = source[j];
         }
    }
    Console.WriteLine("[{0}, {1}, {2}]", combination[0], combination[1], combination[2]);
}
2020-05-19