C# 基于c中的两个数组查找和替换字符串中的字符#

C# 基于c中的两个数组查找和替换字符串中的字符#,c#,linq,C#,Linq,我有一个带有一些特殊字符的字符串 string strValue = "MyString[]{"; 这里,字符串strValue包含一些特殊字符,这些字符在字符数组arrFindString中提到,相应的字符需要替换为具有相同索引位置的arreplaceString中另一个字符数组中的字符 char[] findArray = {'[',']','{'}; char[] replaceArray = { '(', ')', '-' }; 因此,在我的例子中,字符串strValue有一个名为

我有一个带有一些特殊字符的字符串

string strValue = "MyString[]{"; 
这里,字符串strValue包含一些特殊字符,这些字符在字符数组arrFindString中提到,相应的字符需要替换为具有相同索引位置的arreplaceString中另一个字符数组中的字符

char[] findArray = {'[',']','{'};
char[] replaceArray = { '(', ')', '-' };
因此,在我的例子中,字符串strValue有一个名为“[”的字符。因此,首先我们需要在findArray中找到该字符的对应索引,然后我们需要将该字符替换为在replaceArray中具有相同索引的字符。因此这里“[”必须替换为“(”

是否有任何方法可以使用linq实现同样的功能?。。。
我知道每种方法都有可能使用。请帮助

这是最佳方法。这里不需要使用LINQ

string strValue = "MyString[]{";
char[] findArray = { '[', ']', '{' };
char[] replaceArray = { '(', ')', '-' };

char[] charsValue = strValue.ToCharArray();

for (int i = 0; i < charsValue.Length; i++)
{
    for (int j = 0; j < findArray.Length; j++)
    {
        if (charsValue[i] == findArray[j])
        {
            charsValue[i] = replaceArray[j];
            continue;
        }
    }
}

string newStrValue = new string(charsValue); // MyString()-
string strValue=“MyString[]{”;
char[]findArray={'[',']','{'};
char[]replaceArray={'(','),'-'};
char[]charsValue=strValue.ToCharArray();
for(int i=0;i
这是最佳方式。此处无需使用LINQ

string strValue = "MyString[]{";
char[] findArray = { '[', ']', '{' };
char[] replaceArray = { '(', ')', '-' };

char[] charsValue = strValue.ToCharArray();

for (int i = 0; i < charsValue.Length; i++)
{
    for (int j = 0; j < findArray.Length; j++)
    {
        if (charsValue[i] == findArray[j])
        {
            charsValue[i] = replaceArray[j];
            continue;
        }
    }
}

string newStrValue = new string(charsValue); // MyString()-
string strValue=“MyString[]{”;
char[]findArray={'[',']','{'};
char[]replaceArray={'(','),'-'};
char[]charsValue=strValue.ToCharArray();
for(int i=0;i
首先,我宁愿将
findArray
replaceArray
合并成一个
字典

另一种选择是,您可以设置foreach循环:


首先,我宁愿将
findArray
replaceArray
组合成一个
字典

另一种选择是,您可以设置foreach循环:

Linq方法

string strValue = "MyString[]{"; 
char[] findArray = {'[',']','{'};
char[] replaceArray = { '(', ')', '-' };

Func<char, int, char> GetC = (x, c) => c > -1 ? replaceArray.ElementAt(c) : x;
string Result = string.Concat(strValue.Select(x => GetC(x, Array.IndexOf(findArray, x))));
string strValue=“MyString[]{”;
char[]findArray={'[',']','{'};
char[]replaceArray={'(','),'-'};
Func GetC=(x,c)=>c>-1?replaceArray.ElementAt(c):x;
string Result=string.Concat(strValue.Select(x=>GetC(x,Array.IndexOf(findArray,x)));
Linq方法

string strValue = "MyString[]{"; 
char[] findArray = {'[',']','{'};
char[] replaceArray = { '(', ')', '-' };

Func<char, int, char> GetC = (x, c) => c > -1 ? replaceArray.ElementAt(c) : x;
string Result = string.Concat(strValue.Select(x => GetC(x, Array.IndexOf(findArray, x))));
string strValue=“MyString[]{”;
char[]findArray={'[',']','{'};
char[]replaceArray={'(','),'-'};
Func GetC=(x,c)=>c>-1?replaceArray.ElementAt(c):x;
string Result=string.Concat(strValue.Select(x=>GetC(x,Array.IndexOf(findArray,x)));

这里有一个单线解决方案:

string strValue = "MyString[]{";
char[] findArray = { '[', ']', '{' };
char[] replaceArray = { '(', ')', '-' };

string newStr = String.Join("", strValue.Select(c => findArray.Contains(c) ? replaceArray[Array.IndexOf(findArray, c)] : c));

Console.WriteLine(newStr); // MyString()-

以下是一个单线解决方案:

string strValue = "MyString[]{";
char[] findArray = { '[', ']', '{' };
char[] replaceArray = { '(', ')', '-' };

string newStr = String.Join("", strValue.Select(c => findArray.Contains(c) ? replaceArray[Array.IndexOf(findArray, c)] : c));

Console.WriteLine(newStr); // MyString()-

是的,它可以,但是
foreach
更自然,更容易维护。是的,它可以,但是
foreach
更自然,更容易维护。你确定
O(m*n)
其中
m=charsValue.Length;n=findArray.Length
是解决这个问题的好方法吗?@SerhiyChupryk什么让你觉得有更好的方法?这个问题应该有(直觉)线性解,就像Dmitry Bychenko提出的那样你确定
O(m*n)
其中
m=charsValue.Length;n=findArray.Length
是解决这个问题的好方法吗?@SerhiyChupryk什么让你认为有更好的方法?这个问题应该有(直觉)像Dmitry Bychenko提出的线性解决方案,每个答案似乎都很好…谢谢大家,每个答案似乎都很好…谢谢大家