List <List <int >>的组合

我有一个类型为List>的列表,其中包含


List<int> A = new List<int> {1, 2, 3, 4, 5};

List<int> B = new List<int> {0, 1};

List<int> C = new List<int> {6};

List<int> X = new List<int> {....,....};

我想要这样的所有组合


1-0-6

1-1-6

2-0-6

2-1-6

3-0-6

等等。


根据您的说法,可以使用Linq解决吗?


杨__羊羊
浏览 493回答 3
3回答

浮云间

这与我对另一个问题的回答非常相似:var combinations = from a in A&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from b in B&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from c in C&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;orderby a, b, c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select new List<int> { a, b, c };var x = combinations.ToList();对于可变数量的输入,现在添加了泛型:var x = AllCombinationsOf(A, B, C);public static List<List<T>> AllCombinationsOf<T>(params List<T>[] sets){&nbsp; &nbsp; // need array bounds checking etc for production&nbsp; &nbsp; var combinations = new List<List<T>>();&nbsp; &nbsp; // prime the data&nbsp; &nbsp; foreach (var value in sets[0])&nbsp; &nbsp; &nbsp; &nbsp; combinations.Add(new List<T> { value });&nbsp; &nbsp; foreach (var set in sets.Skip(1))&nbsp; &nbsp; &nbsp; &nbsp; combinations = AddExtraSet(combinations, set);&nbsp; &nbsp; return combinations;}private static List<List<T>> AddExtraSet<T>&nbsp; &nbsp; &nbsp;(List<List<T>> combinations, List<T> set){&nbsp; &nbsp; var newCombinations = from value in set&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from combination in combinations&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select new List<T>(combination) { value };&nbsp; &nbsp; return newCombinations.ToList();}

达令说

如何使用.Join方法生成组合的方式呢?static void Main(){&nbsp; &nbsp; List<List<int>> collectionOfSeries = new List<List<int>>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp;new List<int>(){1, 2, 3, 4, 5},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new List<int>(){0, 1},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new List<int>(){6,3},&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new List<int>(){1,3,5}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; int[] result = new int[collectionOfSeries.Count];&nbsp; &nbsp; List<List<int>> combinations = GenerateCombinations(collectionOfSeries);&nbsp; &nbsp; Display(combinations);&nbsp;}此方法GenerateCombinations(..)完成生成组合的主要工作。该方法是通用的,因此可用于生成任何类型的组合。private static List<List<T>> GenerateCombinations<T>(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<List<T>> collectionOfSeries){&nbsp; &nbsp; List<List<T>> generatedCombinations =&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; collectionOfSeries.Take(1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .FirstOrDefault()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Select(i => (new T[]{i}).ToList())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .ToList();&nbsp; &nbsp; foreach (List<T> series in collectionOfSeries.Skip(1))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; generatedCombinations =&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generatedCombinations&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Join(series as List<T>,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; combination => true,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i => true,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (combination, i) =>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<T> nextLevelCombination =&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new List<T>(combination);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nextLevelCombination.Add(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return nextLevelCombination;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).ToList();&nbsp; &nbsp; }&nbsp; &nbsp; return generatedCombinations;}显示助手private static void Display<T>(List<List<T>> generatedCombinations){&nbsp; &nbsp; int index = 0;&nbsp; &nbsp; foreach (var generatedCombination in generatedCombinations)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Console.Write("{0}\t:", ++index);&nbsp; &nbsp; &nbsp; &nbsp; foreach (var i in generatedCombination)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.Write("{0,3}", i);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine();&nbsp; &nbsp; }&nbsp; &nbsp; Console.ReadKey();}
打开App,查看更多内容
随时随地看视频慕课网APP