遍历多维数组或者交错数组是很件很容易的事,用一个递归就可以了,但是要获取它的所有组合,相对来说就要麻烦很多,正好前面笔者就用到了类似的需求,便随手写了一个,分享一下(此处以交错数组为例,二维数组一样的,略略改动即可):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | public List< string > ForearchArray( string [][] array) { //以交错数组为例 //二维数组,按以下规则替换代码即可: //array[i].Length 替换 array.GetLength(i) //array[0][2] 替换 array[0, 2]; List< string > result = new List< string >(); int [] indexArray = new int [array.Length]; int pointer = 0; bool run = true ; int lastIndex; while (run) { run = false ; System.Text.StringBuilder sbr = new System.Text.StringBuilder(); for ( int i = 0; i < array.Length; i++) { if (indexArray[i] != array[i].Length - 1) { run = true ; } sbr.Append(array[i][indexArray[i]]); } result.Add(sbr.ToString()); lastIndex = array.Length - 1 - pointer; if (indexArray[lastIndex] < array[lastIndex].Length - 1) { indexArray[lastIndex]++; continue ; //本级增长成功,继续循环 } //如果本级增长到最大,则向上递增 while (lastIndex > 0) { pointer++; lastIndex = array.Length - 1 - pointer; //递增成功 if (indexArray[lastIndex] < array[lastIndex].Length - 1) { indexArray[lastIndex]++; for ( int i = lastIndex + 1; i < array.Length; i++) { indexArray[i] = 0; } pointer = 0; break ; } } } return result; } |
演示代码:string[][] array = { new string[] { "张三", "李四", }, new string[] { "打", "拿", "亲" }, new string[] { "鱼", "猫", "美女" } };
结果:
- 张三打鱼
- 张三打猫
- 张三打美女
- 张三拿鱼
- 张三拿猫
- 张三拿美女
- 张三亲鱼
- 张三亲猫
- 张三亲美女
- 李四打鱼
- 李四打猫
- 李四打美女
- 李四拿鱼
- 李四拿猫
- 李四拿美女
- 李四亲鱼
- 李四亲猫
- 李四亲美女
作者:翅膀的初衷 出处:http://www.jiniannet.com