2013-12-22 3 views
1

У меня есть списокЗаменить алфавит с другим алфавитом в списке

List<string> myList = new List<string>(); 
myList.Add("A"); 
myList.Add("B"); 
myList.Add("C"); 
... 
... 
... 
myList.Add("Z"); 

Теперь я хочу, чтобы заменить A with N, B with X и so on..........

Я знаю, есть Replace(string, string).

Но есть ли простой способ сделать это?

+0

проще, чем просто вызов метода? – SHM

+0

@ Hassan Я должен проверять каждый раз, если символ в списке A, а затем заменить его на N, ...... Поэтому я задаю вышеупомянутый вопрос. – Khushi

+0

вы хотите заменить все «A» на один вызов метода? – SHM

ответ

6

Ответ mrzli не плох, но я бы предложил его улучшить. Вместо того, чтобы писать целую кучу кода, я написал бы карту:

var map = new Dictionary<string, string>() { 
    {"A", "N"}, 
    {"B", "Z"}, // ... etc 
}; 
var newList = originalList.Select(x=>map[x]).ToList(); 
+0

Мне нравится словарь, но создание нового списка приведет к тому, что все ссылки на исходный список не будут использованы для новых значений. Я думаю, что вопрос заключается в том, как изменить отдельные значения исходного списка. – BlackjacketMack

1

Вы можете использовать IndexOf, что даст вам индекс элемента, который вы пытаетесь найти.

List<string> myList = new List<string>(); 
myList.Add("A"); 
myList.Add("B"); 
myList.Add("C"); 

// find "A", then replace its contents with "N" 
myList[myList.IndexOf("A")] = "N"; 

Это будет заменить только первый найденный элемент, так что вам придется запускать эту линию несколько раз, если вы ожидаете много "A" с в вашем списке.

2

Вы могли бы попробовать что-то вроде этого (требует .NET 3.5):

static void Main(string[] args) 
{ 
    List<string> myList = new List<string>(); 
    myList.Add("A"); 
    myList.Add("B"); 
    myList.Add("C"); 

    myList = myList.Select(x => Modify(x)).ToList(); 
} 

private static string Modify(string input) 
{ 
    if (input == "A") 
    { 
     return "N"; 
    } 
    else if (input == "B") 
    { 
     return "X"; 
    } 
    else 
    { 
     return input; 
    } 
} 
0

, если у вас есть только строковую переменную вы я думаю, что самый простой способ заменить функции. однако у меня есть простой метод расширения ведьма очень удобно на перечислимых поэтому позвольте мне показать вам, что я в таких случаях, это моя функция:

public static class Extensions 
    { 
     public static void ForeEach<T>(this IEnumerable<T> instance, Action<T> action) 
     { 
      foreach (T item in instance) 
      { 
       action(item); 
      } 
     } 
    } 

в вашем случае:

List<string> values = new List<string>(); 
     values.Add("A"); 
     values.Add("C"); 
     values.Add("D"); 
     values.Add("E"); 
     values.Add("F"); 
     values.Add("G"); 
     values.Add("A"); 

     values.ForEach(a => { if (a == "A") { a = "new value"; } }); 

я надеюсь, я понял, что вы имеете в виду: D

3

Я чувствую, как словарем здесь было бы полезно и для повторного использования. Например, если вы хотите создать метод расширения, например .MaskValue() или что-то еще. В любом случае, если вы действительно хотите заменить значения в списке:

var listOfLetters = new List<string> { "A", "B" }; 

var dictionarySwap = new Dictionary<string,string>{{"A","N"},{"B","X"}}; 

for (int i = 0; i < listOfLetters.Count; i++) 
{ 
    listOfLetters[i] = dictionarySwap[listOfLetters[i]]; 
} 
Смежные вопросы