将一个数组与另一个数组匹配
本文关键字:数组 另一个 一个 | 更新日期: 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;
}