2016-03-24 9 views
-2

給定一個哈希設置,如:C# - 我如何可以通過使用正確的字符串情況下的HashSet <string>

HashSet<string> names = new HashSet<string>(StringComparer.OrdinalIgnoreCase) 
{ 
    "Alice", 
    "Bob", 
    "Charles", 
} 

我如何使用這個散列設置爲找到一個不區分大小寫字符串的映射值?例如,如果我有一個字符串"aLICe",我希望能夠找到"Alice"

+3

沒有你的代碼的工作? – Itsik

+4

你的代碼應該可以工作。請參閱http://stackoverflow.com/questions/16922435/c-make-hashsetstring-case-insensitive –

+0

會降低哈希集和輸入字符串中的值是否足夠,或者您是否需要全面的tupo-fixer? –

回答

0

如果我正確理解你,你想獲得添加到散列集的原始值。因此,因爲「Alice」是哈希集合中的值,所以您希望得到「alice」或「aLICe」的輸入。

有效的是,這對散列集是不可能的。您將不得不遍歷哈希集的元素以查找原始值,使其與列表一樣高效。

你可以做的是有一本字典,而不是它可以讓你有一個不區分大小寫的查找,但返回的實際值,而不是:

var names = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase) 
{ 
    { "Alice", "Alice" }, 
    { "Bob", "Bob" }, 
    { "Charles", "Charles" } 
}; 

Console.WriteLine(names["alice"]); // Alice 
Console.WriteLine(names["aLICe"]); // Alice 
1

只要我貼我意識到答案是簡單地使用不區分大小寫的字典問題...

var names = new Dictionary<string, string>StringComparer.OrdinalIgnoreCase) 
{ 
    {"Alice","Alice"}, 
    {"Bob","Bob"}, 
    {"Charles","Charles"}, 
} 
0

那麼它不是非常漂亮,但你可以使用:

string match = names.FirstOrDefault(n => names.Comparer.Equals(n,"aLice")); 

或者使用Dictionary<string, string>代替,更好,值更好。 HashSet善於存儲唯一的值,但沒有一個很好的機制來獲得「匹配」值。

相關問題