极念网欢迎您!
c#遍历二维数组(或交错数组)的所有组合
作者:翅膀的初衷来源:本站原创发布时间:2014/3/28 15:04:03查看数:63952

遍历多维数组或者交错数组是很件很容易的事,用一个递归就可以了,但是要获取它的所有组合,相对来说就要麻烦很多,正好前面笔者就用到了类似的需求,便随手写了一个,分享一下(此处以交错数组为例,二维数组一样的,略略改动即可):


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