本帖最后由 zhq1001 于 2012-06-15 13:28:46 编辑

解决方案 »

  1.   

    假设当前行索引为N,值为V(假设索引从0开始)
    遍历前面所有行,比较值,如果相等,记录当前索引,此时间隔为N-index-1
    如果都不相等,间隔直接=N
      

  2.   

    大略写了一个,有点罗嗦,凑和着看吧        private void Foo(List<string> list,int[] arr,int start)
            {
                bool find = false;
                if (start == arr.Length) return;
                if (start == 0)
                {
                    list.Add(arr[start].ToString() + ":0");
                    Foo(list, arr, ++start);
                    return;
                }
                for (int i = start-1; i >= 0; i--)
                {
                    if (start == 0)
                    {
                        list.Add(arr[start].ToString() + ":0");
                        find = true;
                        break;
                    }
                    else if (arr[start-1] == arr[start])
                    {
                        list.Add(arr[start].ToString() + ":0");
                        find = true;
                        break;
                    }
                    else if (arr[i] == arr[start])
                    {
                        list.Add(arr[start].ToString() + ":" + (start - i - 1).ToString());
                        find = true;
                        break;
                    }
                }
                if (!find)
                    list.Add(arr[start].ToString() + ":0");
                Foo(list, arr, ++start);
            }
    使用
                int[] arr = new int[] { 3, 5, 8, 8, 6, 6, 3, 0, 2, 1, 3, 3, 5, 9, 3, 0, 3, 4, 8 };
                List<string> list = new List<string>();
                Foo(list, arr,0);//list中是结果
      

  3.   


    int[] arr = new int[] { 3, 5, 8, 8, 6, 6, 3, 0, 2, 1, 3, 3, 5, 9, 3, 0, 3, 4, 8 };
    List<int> list = arr.ToList();
    int[] ret = new int[list.Count];
    ret[0] = 0;
    for (int i = 1; i < list.Count; i++)
    {
        ret[i] = i - list.LastIndexOf(list[i], i - 1, i) - 1;
    }
    /*
    0 1 2 0 4 0 5 7 8 9 3 0 10 13 2 7 1 17 14
    */
      

  4.   


    老师们,那如果我要把计算得出的结果依次填入另外一列的单元格[row,2],又该加入一句什么呢?
      

  5.   

    for (int r = 1; r < dataGrid.Rows.Count; r++)
                {
                        int[] ylz = { Convert.ToInt32(dataGrid[r, 1])};
                        List<int> list = ylz.ToList();
                        int[] ret = new int[list.Count];
                        ret[0] = 0;
                        for (int i = 1; i < list.Count; i++ )
                        {
                            ret[i] = i - list.LastIndexOf(list[i], i - 1, i) - 1;
                            dataGrid[r, 1] = ret[i];
                        }
                }把他运用到 datagrid 表格,按上面的写,错在哪呢?
      

  6.   

    字符串形式:"35886630......"
    或是整型的:new int[] { 3, 5, 8, 8, 6, 6, 3, 0, 2, 1, 3, 3, 5, 9, 3, 0, 3, 4, 8 };
      

  7.   


    int[] ylz = new int[dataGrid.Rows.Count-1];
    for (int r = 1; r < dataGrid.Rows.Count; r++)
    {
        ylz[i-1] =  Convert.ToInt32(dataGrid[r, 1]);
    }
    List<int> list = ylz.ToList();
    int[] ret = new int[list.Count];
    ret[0] = 0;
    for (int i = 1; i < list.Count; i++ )
    {
        ret[i] = i - list.LastIndexOf(list[i], i - 1, i) - 1;
    }
    for (int r = 1; r < dataGrid.Rows.Count; r++)
    {
        dataGrid[r, 2] = ret[r-1];
    }
      

  8.   

    dataGrid[r, 2].Text = ret[r-1];
      

  9.   

    dataGrid[r, 2].Text = ret[r-1].ToString();哪个论坛不能编辑帖子的,真BT