みなさんこんにちは、私はキャベツのアーチの豚です。
需要:
座席は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つの方法の違い。効率の違いは、最初の種類のクエリトラバーサルが低すぎることです。