2012-08-29 15 views
1

我從來沒有想過我會問這個......我需要一種方式來模仿C#中的ksort函數。在C中模仿PHP的ksort#

這裏的問題... PHP做這個...

PHP代碼

$arr = array(
    "tagValues" => "asdfasd", 
    "email" => "asdfasd", 
    "referrer" => "asdfasd", 
    "tags" => "asdfasd", 
); 

echo "Base array \n\n"; 
print_r($arr); 

ksort($arr); 

echo "\n\nksort'ed array \n\n"; 
print_r($arr); 

PHP輸出

Base array 

Array 
(
    [tagValues] => asdfasd 
    [email] => asdfasd 
    [referrer] => asdfasd 
    [tags] => asdfasd 
) 


ksort'ed array 

Array 
(
    [email] => asdfasd 
    [referrer] => asdfasd 
    [tagValues] => asdfasd 
    [tags] => asdfasd 
) 

雖然如果我這樣做在C#。 ..

string[] sortedKeys = form.AllKeys.OrderBy(x => x).ToArray(); 

它以不同的順序出現。 tags將在tagValues之前,因爲它應該是。這是真正的字母順序。

據我的理解,ksort在數組上做了一些區分大小寫的ASCII工作,這就是爲什麼它以不同的順序出現的原因。

我該如何在C#中實現?最好用LINQ。謝謝!

對於在背景故事的興趣...

基本上,我試圖創造的每FastSpring API字母順序排序輸入參數的MD5哈希值。他們的PHP片段的操作與我翻譯爲C#時的預期不同,因此散列總是不正確的。

回答

7

關鍵字是StringComparer.Ordinal

string[] sortedKeys= form.AllKeys.OrderBy(x => x,StringComparer.Ordinal).ToArray(); 
+0

你的gravatar讓我的思維上有SO – zerkms

+1

完美的佈局問題,就是這樣。謝謝! – jocull