提问者:小点点

如何检查字典中是否包含字符串中的字母


我想创建一种算法,把字符串中的字母变成int,假设字符串是ABCD,输出是1234,这将确保相同的消息每次都是相同的,我的想法是创建一个字典,以char作为键,int作为值,然后它会循环通过字符串,在这个循环中,它会循环通过字典中的所有内容,类似这样

for(int i = 0; i < SeedS.Length; i++) {

    for(int j = 0; j < AlphabetDictionary.Count; j++) {

        //Do something

    }

}

然后我的想法是检查种子中的内容(索引为i)是否等于字典中的关键字(索引为j),然后将该位置的值赋给输出,我试着在网上搜索如何做到这一点,但我没有找到任何可以帮助,(我可以使用数组或列表,但我认为这只是懒惰和不太好,如果我可以使用字典)我使用了1-2次字典,我不知道如何做这样的事情,我想到了所有其他的,但我停在这一点,因为我不知道现在该做什么。我想要任何帮助提款机,因为我在过去的一个星期里一直在研究这个“算法”,我猜

PS:我也试着看Unity YT教程和阅读Unity文档,但我什么也没有发现。


共2个答案

匿名用户

您可以使用以下内容:

// Create your dictionary here.
var dictionary = new Dictionary<char, int>();

// The string that will be converted.
string str = "Hello";

foreach (char character in str)
{
    if (dictionary.ContainsKey(character))
    {
        int value = dictionary[character];

        // Use your value here.
    }
}

词典提供了通过键在大约O(1)时间内找到值的函数。对它们进行迭代会花费更长的时间,因此会破坏使用字典的目的。

匿名用户

您可以使用dictionary.tryGetValue并使用两个字典来来回操作

private Dictionary<int, char> indexToChar;
private Dictionary<char, int> charToIndex;

public string GetString(IReadonlyList<int> indices)
{
    var sb = new StringBuilder();
    foreach(var id = indices)
    {
        if(indexToChar.TryGetValue(id, out var c)
        {
            sb.Append(c);
        }
    }

    return sb.ToString();
}

public IReadonlyList<int> GetIndices(string input)
{
    var ids = new List<int>();

    for(var i = 0; i < input.Length; i++)
    {
        if(charToIndex.TryGetValue(input[i], out var id)
        {
            ids.Add(id);
        }
    }

    return ids;
}