将一个数组与另一个数组匹配

本文关键字:数组 另一个 一个 | 更新日期: 2023-09-27 18:31:27

我正在寻找一个数组匹配方法。

这里我有两个数组,如代码所示

char[] normalText = new char[26] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char[] parsedText = new char[26] {'b', 'c', 'd', 'e', 'f', 'g', ...};

而且,我想匹配它们,如果我在程序中写"ABC",它将变成"BCD"而且,我做了一个这样的文本解析器方法:

        parsing = input.ToCharArray();
        foreach (char c in parsing)
        {
            throw new NotImplementedException();
        }

但是,我不知道在 foreach 语句之后应该做什么样的查询来匹配它们。 如果您知道如何在代码中匹配它,请在此处发布,这将不胜感激

将一个数组与另一个数组匹配

我会使用这样的东西:

var input = "abc";
var parsing = input.ToCharArray();
var result = new StringBuilder();
var offset = (int)'a';
foreach (var c in parsing) {
    var x = c - offset;
    result.Append(parsedText[x]);
}

看起来您想使用这些来制作 1:1 翻译。

最好的(即:最可扩展的)方法可能是使用字典:

Dictionary<char, char> dictionary = new Dictionary<char, char>();
dictionary.Add('a', 'b');
dictionary.Add('b', 'c');
dictionary.Add('c', 'd');
//... etc (can do this programmatically, also

然后:

char newValue = dictionary['a'];
Console.WriteLine(newValue.ToString()); // "b"

等等。 使用字典,您还可以获得列表的所有功能,这取决于您正在做什么,这可能非常方便。

这是你想要的。您可以使用Array.IndexOf(oldText, s)获取旧数组中字符的索引,然后通过该索引获取新数组中的值。

string input="abc";
char[] oldText = new char[26] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char[] newText = new char[26] { 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','a'};
char[] array = input.ToCharArray();
StringBuilder output= new StringBuilder();
foreach(char s in array)
{
  output.Append(newText[Array.IndexOf(oldText, s)]);
}
Console.WriteLine(output.ToString()); // "bcd"

像这样的东西,现在将其格式化为最适合您的方式。

char[] normalText = new char[26] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char[] dictionary = new char[26] {'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y' };    
parsing = input.ToCharArray();  
foreach (char c in parsing)
        {
           if(index(c,normalText)<= dictionary.Length) 
               Console.WriteLine(dictionary[index(c,normalText)]);
        }
int index(char lookFor, char[] lookIn) 
    {
        for (int i = 0; i < lookIn.Length; i++)
            {
                if (lookIn[i] == lookFor)
                    return i;
            }
        return -1;
    }