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]; }
遍历前面所有行,比较值,如果相等,记录当前索引,此时间隔为N-index-1
如果都不相等,间隔直接=N
{
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中是结果
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
*/
老师们,那如果我要把计算得出的结果依次填入另外一列的单元格[row,2],又该加入一句什么呢?
{
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 表格,按上面的写,错在哪呢?
或是整型的:new int[] { 3, 5, 8, 8, 6, 6, 3, 0, 2, 1, 3, 3, 5, 9, 3, 0, 3, 4, 8 };
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];
}