我决定解决在字符串中查找给定字符的问题。我用两种方式解决了它:
第一个(使用哈希表将我们要查找的字符的值保存在 ASCII 中):
static void Hash(string text, char[] charsToFind)
{
Dictionary<int,char> chars = new Dictionary<int,char>();
foreach (var letter in charsToFind)
{
chars[(int)letter] = letter;
}
foreach (var letter in text)
{
if (chars.ContainsKey((int)letter))
{
if (letter == chars[(int)letter])
{
Console.WriteLine("Element found at: {0}, value: {1}", (int)letter, letter);
}
}
}
}
第二种方式(天真):
static void Naive(string text, char[] charsToFind)
{
foreach (var letter in text)
{
foreach (var character in charsToFind)
{
if ((int)letter == (int)character)
{
Console.WriteLine("Element found at: {0}, value: {1}", (int)letter, letter);
}
}
}
}
一切正常!我想问的问题是哪个更好,是否有更好的解决方案来解决这个问题?
提前致谢!
最佳答案
使用 LINQ:
string input = "abc";
char[] charsToFind = new[] { 'a', '1', 'b' };
IEnumerable<int> ids = charsToFind.Select(ch => input.IndexOf(ch)); // { 0, -1, 1 }
与 Hashset<T>
这是通用哈希表:
HashSet<char> set = new HashSet<char>(input.ToCharArray());
...
关于c# - 使用哈希表查找字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174900/