浏览 2128 次
锁定老帖子 主题:请教一个“产生表格行列座标”的算法思路
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-27
假设存在一个二维表格,每个单元格可能占多行多列; 单元格数据按单元格左上角行列顺序从小到大(先按行排序,后按列排序) 保存在一个数组中;表格的列数已知,表格的行数未知,由单元格数组控制。 要求:设计一个算法计算出每个单元格的左上角X和Y座标,表格左上角座标从(1,1)开始。 我实现了一种简单的情况如下: /** * 计算单元格在表格中左上角的坐标 X Y (该方法仅仅适合于位于同一行上的所有单元格占行数相同的情况) * 遍历单元格数组,判断单元格是否出现在同一行上,如是则变化X坐标,而Y坐标不变; * 当要换行时,则Y坐标要变化,X坐标回到列开始坐标1,并记录坐标变化情况。 * @paran column 表格的列数 * @param cellList 表格中的所有单元数组 * @return relist 含有左上角坐标的新的单元数组 */ public List generateIndex(int column ,List cellList ){ List relist = new ArrayList(); int cur_x = 1 ; //起始X坐标值 且 1 =< cur_x <= column int cur_y = 1 ; //起始Y坐标值 for(int i = 0; i < cellList.size(); i++){ Cell vcell = (Cell)cellList.get(i); if(cur_x != column + 1){ vcell.setIndexX(cur_x); cur_x += vcell.getColspan(); vcell.setIndexY(cur_y); relist.add(vcell); }else{ //新换行 vcell.setIndexX(1); cur_x = 1 + vcell.getColspan(); cur_y += vcell.getRowspan(); vcell.setIndexY(cur_y); relist.add(vcell); } } return relist ; } 但是更加复杂的情况(如下描述),我却没有思路,还请各位大侠给点思路,能给个代码更好,先谢谢了。 /** * 计算单元格在表格中左上角的坐标 X Y (该方法仅仅适合于所有单元格占行数占列数动态变化的情况) * 这种情况很复杂,类型很多,我们可以抽象出一种我们经常遇到的情形:就是多个单元格行合并不存在跨行交差情况, * 就是所有‘行’以占行最大的那个单元格为准来计算 * @paran column 表格的列数 * @param cellList 表格中的所有单元数组 * @return relist 含有左上角坐标的新的单元数组 */ public List generateIndex2(int column ,List cellList ){ List relist = new ArrayList(); ...... ...... return relist ; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |