星期三, 4月 29, 2009

(題目)抓取陣列中最接近且小於輸入值的數

今天有人問我這個問題"抓取陣列中最接近且小於輸入值的數"..我記錄下來..以後有需要的人可以參考一下..

public static class CompareIntHelper
{
//過濾比自己小的int[]
private static int[] GetThenLessArray(int number, int[] randomArr)
{
return randomArr.Where(a => a < number).ToArray();
}
//抓最接近
public static int GetThenLessAndClosedNumber(int number, int[] randomArr)
{
randomArr = GetThenLessArray(number, randomArr);
if (randomArr.Length == 0)
throw new Exception("沒有數字比亂數陣列小");

int ans = randomArr[0];
int intTemp = int.MaxValue;
Array.ForEach(randomArr, a =>
{
if (number - a < intTemp)
{
ans = a;
intTemp = number - a;
}
});
return ans;
}
}

使用如下..

//測試資料
Random r = new Random();
int[] randomArr = new int[1000];
for (int i = 0; i < 1000; i++)
randomArr[i] = r.Next(0, 10000);
//列出結果
try
{
Response.Write(CompareIntHelper.GetThenLessAndClosedNumber(1200, randomArr) + "<br />");
}
catch (Exception ex)
{
Response.Write(ex.Message);
}

--2009/5/1 更新--
經過一些討論..發現只要加入排序..程式就更簡單了..Tongue out

public static class CompareIntHelper1
{
//抓最接近,且小於number
public static int GetThenLessAndClosedNumber(int number, int[] randomArr)
{
var result = randomArr.OrderByDescending(a => a).Where(a => number > a);
if (result.Count() == 0)
throw new Exception("沒有數字比亂數陣列小");
return result.First();
}
}

沒有留言: