C #: изменение элемента из списка в верхний регистр, если он содержит определенную букву в нем - PullRequest
0 голосов
/ 20 октября 2019

У меня есть список, и мне нужно сделать его заглавными, если они содержат конкретные буквы.

Я пытался использовать mean.ToString().ToUpper().Contains("g");, но он не работает.

    static void Main(string[] args)
    {           

        List<string> mean = new List<string>() { "dog", "smile", "cat", 
        "bat", "giraffe"};
        // e.g. values containing letter "g" have to be changed to uppercase
        // "dog" and "giraffe" should be changed to UPPERCASE


        foreach (string s in mean)
        {
            Console.WriteLine(s);
        }
    }

Ответы [ 3 ]

1 голос
/ 20 октября 2019

Вы можете использовать Linq с простым троичным, чтобы выполнить это:

static void Main(string[] args)
    {
        List<string> mean = new List<string>() { "dog", "smile", "cat", "bat", "giraffe"};
        mean.RemoveAll(item => item.Contains("t"));
        mean = mean.Select(item => item.Contains("g") ? item.ToUpper() : item).ToList();

        foreach (string s in mean)
        {
            Console.WriteLine(s);
        }
    }

Метод Select возьмет каждый элемент в списке и выполнит с ним операцию. В этом случае мы хотим выполнить операцию, только если элемент содержит «g». Вот где появляется троичный. Если элемент содержит «g», мы возвращаем item.ToUpper(), а если нет, то просто возвращаем item. Поскольку выходные данные оператора select являются IEnumerable<string>, нам нужно вызвать метод ToList() для него, чтобы присвоить значение обратно mean.

Выходные данные приведенного выше кода:

DOG smile GIRAFFE

0 голосов
/ 20 октября 2019

в foreach вы не используете mean.ToString().ToUpper().Contains("g");, вместо этого вы используете s, поскольку mean - это список, так что да, он не будет работать.

Кроме того, .ToString().ToUpper().Contains("g") ToUpper() здесь сделает строку UpperCase, поэтому .Contains("g") также может быть в верхнем регистре.

вы можете сделать это:

foreach (string s in mean)
{
    if (s.ToLower().Contains("g"))
        Console.WriteLine(s.ToUpper());
}

или, если вам нравится Linq:

// Linq

var result = mean.Where(e => e.ToLower().Contains("g")).Select(x => x.ToUpper()).ToList();

foreach (var s in result)
{
    Console.WriteLine(s);
}
0 голосов
/ 20 октября 2019

Как вы ожидаете, что оно будет соответствовать LowerCase g после того, как вы уже преобразовали его в UpperCase G

mean.ToString().ToUpper().Contains("g");

Должно быть

mean.ToString().ToUpper().Contains("G");

или даже лучше

mean.IndexOf("g", StringComparison.InvariantCultureIgnoreCase) >= 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...