我們有一個預先定義的紙張尺寸列表,例如,從可用紙張尺寸列表中獲取最近的紙張尺寸
PageSize = PageSize.A3, Height = 297, Width = 420
PageSize = PageSize.A4, Height = 210, Width = 297
PageSize = PageSize.A5, Height = 148, Width = 210
PageSize = PageSize.B4, Height = 257, Width = 364
PageSize = PageSize.B5, Height = 182, Width = 257
PageSize = PageSize.LETTER, Height = 216, Width = 279
PageSize = PageSize.LEGAL, Height = 216, Width = 356
PageSize = PageSize.TABLOID, Height = 279, Width = 432
我必須編寫一個C#代碼才能從上面列出的輸入紙張尺寸中獲取最近的紙張尺寸。
我曾嘗試:
matchedPageSize = (from item in pageSizeMap
where item.Width >= height
where item.Height >= width
let itemSum = item.Width * item.Height
let difference = Math.Abs((height * width) - itemSum)
orderby difference
select item).FirstOrDefault();
if(matchedPageSize == null)
{
matchedPageSize = (from item in pageSizeMap
where item.Width < height
where item.Height < width
let itemSum = item.Width * item.Height
let difference = Math.Abs((height * width) - itemSum)
orderby difference
select item).FirstOrDefault();
}
上述邏輯運作良好,除了在兩種情況下:
- 當高度小於上面提到的所有高度和寬度大於所有上述寬度。對於例如高度:50,寬度:500
- 當高度超過上述所有高度時,寬度爲 小於上述所有寬度。對於例如高度:400,寬度:150
請求您爲上述問題建議最佳邏輯。
@Roma:是的,這是第一個案例。此外,問題與500X100大小。 – Saket
檢查第二次選擇後是否(matchedPageSize == null)。現在這意味着沒有預定義的大小覆蓋用戶的區域。但是從你發佈的情況來看,不清楚在這種情況下要做什麼。 –
您需要準確定義您的邏輯是用於決定選擇哪種尺寸。然後寫代碼 –