[何百もの勝利]-3クリエーションゲームは、座席の表示の問題を解決するために最適化され、リスト内のオブジェクトの属性に従って2次元配列に変換されます。

みなさんこんにちは、私はキャベツのアーチの豚です。
需要:
座席は3つの状態に分かれています。1。座席があります。2.座席なし、3、破損。
まず、座席リスト内の自習室ID、つまりリスト<座席>に従って、リスト内のすべての座席を格納します。その後、座席の3つの状態に応じて、赤、白で表示され、表示されません。
座席表の属性seatId、row(row)、col(column)、status(status)

コントローラ:

@RequestMapping("query")
	public ModelAndView querySeat(int roomId){
		ModelAndView mv=new ModelAndView();
		mv.setViewName("/manager/seat_update.jsp");
		List<Seat> seatList=seatService.querySeat(roomId);
		//获得房间的行数以及列数
		Room room=roomService.queryRoomById(roomId);
		
		mv.addObject("room", room);
		mv.addObject("seatList",seatList);
		return mv;
	}

フロントデスクソリューション


						<!-- 控制行 -->
						<c:forEach var="i" begin="1" end="${requestScope.room.rows}"
							step="1">
							<div class="row seat-row" data-row="${i}">
								<div class="col-xs-1 text-center">
									<span class="row-num">${i}</span>
								</div>
								<div class="col-xs-11">

									<!-- 控制列 -->
									<c:forEach var="j" begin="1" end="${requestScope.room.cols}"
										step="1">
										<c:forEach items="${requestScope.seatList}" var="seat">

											<c:if test="${(seat.row==i) && (seat.col==j)&& (seat.status=='有座')}">
												<span class="seat-empty" data-col="${j}"></span>
											</c:if>
											<c:if test="${(seat.row==i) && (seat.col==j)&& (seat.status=='无座')}">
												<span class="seat-sold" data-col="${j}"></span>
											</c:if>
											<c:if test="${(seat.row==i) && (seat.col==j)&& (seat.status=='损坏')}">
												<span class="none" data-col="${j}"></span>
											</c:if>
										</c:forEach>

									</c:forEach>

								</div>
							</div>
						</c:forEach>

効果:

ここに画像の説明を挿入
これは元のアイデアでしたが、最終的には効率が低すぎることがわかりました。すべてのサイクルがリストをトラバースする必要があるため、効率は実際には不十分です。

すべてが別のアイデアを持っています。リストの座席を2次元配列に格納します。2次元配列の添え字は座席の行と列で、添え字に従って座席を取得し、座席の状態によって座席を決定します。毎回リストを走査しないように色。効率の向上。さらに面倒なことなく、最初にutilを記述します。

書いた後、wocはそれが良すぎることに気づきました。1行のコードで問題が解決しました

public class SeatUtil {
	
	public Seat[][] listToArray(List<Seat> list,int rows,int cols){
		
		Seat[][] seatArray=new Seat[rows][cols];
		
		for(Seat seat:list){
			//这行代码妙啊
			seatArray[seat.getRow()-1][seat.getCol()-1]=seat;
		}
		
		return seatArray;
		
	}
}

次に、コントローラ層はこの2次元配列を渡します

@RequestMapping("query")
	public ModelAndView querySeat(int roomId){
		ModelAndView mv=new ModelAndView();
		mv.setViewName("/manager/seat_update.jsp");
		List<Seat> seatList=seatService.querySeat(roomId);
		//获得房间的行数以及列数
		Room room=roomService.queryRoomById(roomId);
		
		//这行代码仔细品
		Seat[][] seatArray=new SeatUtil().listToArray(seatList, room.getRows(), room.getCols());
		
		mv.addObject("room", room);
		mv.addObject("seatArray",seatArray);
		return mv;
	}

フロント:主な違いはフロントです。

<!-- 控制列 -->
									<c:forEach var="j" begin="1" end="${requestScope.room.cols}"
										step="1">

											<c:if test="${requestScope.seatArray[i-1][j-1].status=='有座'}">
												<span class="seat-empty" data-col="${j}"></span>
											</c:if>
											<c:if test="${requestScope.seatArray[i-1][j-1].status=='无座'}">
												<span class="seat-sold" data-col="${j}"></span>
											</c:if>
											<c:if test="${requestScope.seatArray[i-1][j-1].status=='损坏'}">
												<span class="none" data-col="${j}"></span>
											</c:if>

									</c:forEach>

成功しました!
ピンイーピンの2つの方法の違い。効率の違いは、最初の種類のクエリトラバーサルが低すぎることです。

元の記事を24件公開 賞賛された4件 2038回の訪問

おすすめ

転載: blog.csdn.net/weixin_44226263/article/details/105301828