星期五, 9月 25, 2009

Dictionary 如何排序

最近在工作上遇到小問題,就是 Dictionary 麼排序,有些高手一看到就很直覺得想,阿就用 Linq to Object 就好啦,10秒鐘搞定..一_一||..話說是沒錯啦,如果有 Linq to Object 這把屠龍刀在手上,管他天皇老子,砍下去就好啦..問題就是,我的環境是 2.0 啦..還是要想一個辦法來解決一下,看code吧..

先貼一下2.0是怎麼苦命的解法..

Dictionary<string, string> s = new Dictionary<string, string>();
s.Add("1", "aItem");
s.Add("2", "cItem");
s.Add("3", "bItem");

List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(s);
myList.Sort(delegate(KeyValuePair<string, string> firstPair, KeyValuePair<string, string> nextPair)
{
return firstPair.Value.CompareTo(nextPair.Value);
});

Dictionary<string, string> dic = new Dictionary<string, string>();

foreach (KeyValuePair<string, string> myKey in myList)
{
dic.Add(myKey.Key, myKey.Value);
}

foreach (KeyValuePair<string, string> a in dic)
{
Console.WriteLine(a.Key + " " + a.Value);
}

Console.Read();

再貼一下3.5的Linq to Object是怎麼逍遙的隨筆..

Dictionary<string, string> s = new Dictionary<string, string>();
s.Add("1", "aItem");
s.Add("2", "cItem");
s.Add("3", "bItem");

var aaaa = s.OrderBy(a => a.Value);
foreach (var a in aaaa)
{
Console.WriteLine(a.Key + " " + a.Value);
}

Console.Read();

客官阿..你說說看阿您說說看阿..^____^||..

參考:
http://msdn.microsoft.com/zh-tw/library/xfhwa508%28VS.80%29.aspx

星期二, 9月 15, 2009

在 MS-SQL 裡用 Like 來取代 IN

今天看到一篇文章SQL Dynamic In..裡面內容是在講怎麼把 ms-sql 裡面的運算子 in 換成 like 取得同樣的結果..讓我忽然想到我之前的一篇文章解決Sql Parameter碰上SQL Where In問題,馬上測試一下..

在有索引下執行..

select *
from Orders as o
where ',10254,10257,10261,' like '%,' + ltrim(rtrim(str(o.OrderID))) + ',%'

select *
from Orders as o
where o.OrderID in (10254,10257,10261)

image

有index果然還是in效率有好..

無索引下執行..

select *
from Orders as o
where o.ShipCity in ('Reims','Bern','Graz');

select *
from Orders as o
where ',Reims,Bern,Graz,' like '%,' + ltrim(rtrim(o.ShipCity)) + ',%'

image

沒索引下..就差不多啦..

各位看官參考一下..服用前請確認有副作用..在慢慢服下阿..^______^..

參考:
http://msdn.microsoft.com/zh-tw/library/ms189826%28SQL.90%29.aspx

星期五, 9月 11, 2009

(題目)畫出數字山..

今天在網路看到一個有趣的面試問題..問題是..

問.試設計出如下顯示的排列方式。(不限任何程式,要用c要用php要用vb隨你)
1
22
333
44
5

花了一點時間..寫了下列的class去處理..

public class StringPrinter
{
public void PrintResult(int maxShowNumber)
{
int maxPosition;
if (maxShowNumber % 2 == 1)
{
//單數
maxPosition = (maxShowNumber + 1) / 2;
PrintUpDown(maxShowNumber, maxPosition, true);
}
else
{
//表示他是偶數
maxPosition = (maxShowNumber) / 2;
PrintUpDown(maxShowNumber, maxPosition, false);
}
}
/// <summary>
/// 從上到下畫出來
/// </summary>
/// <param name="maxShowNumber"></param>
/// <param name="maxPosition"></param>
private void PrintUpDown(int maxShowNumber, int maxPosition, bool isOdd)
{
bool hook = isOdd;
//畫出前半部
int showNumber = 0;
for (int i = 1; i <= maxPosition; i++)
{
showNumber++;
PrintLine(showNumber, i);
}
//畫出後半部
for (int i = showNumber; i > 0; i--)
{
if (hook)
{
hook = false;
continue;
}
showNumber++;
PrintLine(showNumber, i);
}
}
/// <summary>
/// 畫出每行該出現的數字
/// </summary>
/// <param name="number"></param>
/// <param name="position"></param>
private void PrintLine(int number, int position)
{
string strTemp = string.Empty;
for (int i = 1; i <= position; i++)
{
strTemp = string.Concat(strTemp, number);
}
Console.WriteLine(strTemp);
}
}

結果如下面..

輸入9..

image

輸入8..

image

感想..

一開始看到這題目感覺不難..在寫的過程中..其實要很清楚自己在做什麼..因為邊寫邊看電視..寫到一半迷路了..哈..
可以養成習慣先畫圖..大綱抓出來..在寫..就不容易迷路了..

星期四, 9月 03, 2009

開啟 Windows 7 休眠模式

大家都在用 Windows 7 了ㄇ..最近把 Windows 7 裝上了..發現還真的不錯用..哈..不過今天不是要來褒 Windows 7 的..今天是要來寫一篇..如何開啟 Windows 7 的休眠模式..在我的 notebook 裡面..裝好 Windows 7 的時候..就已經開啟休眠模式了..可是我的桌機就沒有..因為一直以來都是使用休眠模式的習慣..所以找不到還真變扭..話不多說..直接看圖教學ㄅ..

1.開始 → 打上 cmd (打 ctrl+shift+enter 進去 administrator 模式)

image

2.打上 powercfg /hibernate on

image

3.開始 → 控制台 → 系統及安全性 → 電源選項 → 更變計畫設定 → 更變進階電源設定

去把"允許混和睡眠"設定成"關閉"

image

這樣就可以看到"休眠"了

image

參考"
http://www.intowindows.com/how-to-enable-hibernate-option-in-windows-7/