C# 的struct和class密切相關。它們有狀態和行為。它們有接受引數的建構函式,執行個體可以指定、測試是否相等,並儲存在集合中。
enum Unit
{
Kg,
Lb
}
struct Weight
{
private double count;
private Unit unit;
public Weight(double count, Unit unit)
{
this.count = count;
this.unit = unit;
}
public override string ToString()
{
return count.ToString() + unit.ToString();
}
}
new Weight(77.5, Unit.Kg).ToString();
// => "77.6Kg"
Isaacs Asteroid Exploration Co. 的申請部門交派給你一項任務:改善他們土地申請系統的效能。
每當有新的小行星準備好開採,投機客就會受邀針對一塊土地提出申請。小行星的土地被劃分成一塊塊四邊形的地塊,投機客藉由指定尺寸來申請土地。
你的目標是開發一套高效能的系統,來應付這波過去曾導致網站當機的搶地熱潮。
測量單位是 100 公尺,但在這些任務中可以忽略。
完成Plot結構的實作,這個結構由 4 個 coord 結構組成(建構函式會接收這些結構)。
實作ClaimsHandler.StakeClaim()方法,讓申請可以被註冊。
實作ClaimsHandler.IsClaimStaked()方法,判斷某筆申請是否已經提出。
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.IsClaimStaked(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
// => true
實作ClaimsHandler.IsLastClaim()方法,比較目前的申請與上一筆申請。
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.IsLastClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
// => true
實作ClaimsHandler.GetClaimWithLongestSide()方法,檢查所有已註冊的申請,並回傳邊長最長的地塊。地塊中的座標資料保證會構成連續的矩形。
var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.StakeClaim(new Plot(new Coord(10,1), new Coord(20,1), new Coord(10,2), new Coord(20,2)));
ch.GetClaimWithLongestSide();
// => new Plot(new Coord(1,1), new Coord(20,1), new Coord(1,2), new Coord(2,2))