Преобразуйте строку в международный массив с помощью LINQ [дубликат]

Этот вопрос уже имеет ответ здесь:

У меня есть функция (tointarray) для преобразования строки в массив ints, но я не очень удовлетворен им. Это делает задание, но должен быть более изящный способ сделать это, и возможно LINQ мог помочь здесь. К сожалению, я не очень хорош в LINQ. Существует ли лучший путь?

Моя функция:

{
    string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
    int[] ia = tointarray(s1, ';');
}
int[] tointarray(string value, char sep)
{
    string[] sa = value.Split(sep);
    int[] ia = new int[sa.Length];
    for (int i = 0; i < ia.Length; ++i)
    {
        int j;
        string s = sa[i];
        if (int.TryParse(s, out j))
        {
            ia[i] = j;
        }
    }
    return ia;
}
70
задан Patrick Hofman 6 March 2018 в 11:02
поделиться

4 ответа

В этом посте задавался похожий вопрос и для его решения использовался LINQ, возможно, это поможет и вам.

string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
int[] ia = s1.Split(';').Select(n => Convert.ToInt32(n)).ToArray();
200
ответ дан 24 November 2019 в 13:12
поделиться

Вот код, который отфильтровывает недопустимые поля:

    var ints = from field in s1.Split(';').Where((x) => { int dummy; return Int32.TryParse(x, out dummy); })
               select Int32.Parse(field);
8
ответ дан 24 November 2019 в 13:12
поделиться
s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray();

Непроверено, и в голову не пришло ... тестирование правильного синтаксиса.

Протестировано, все в порядке.

17
ответ дан 24 November 2019 в 13:12
поделиться

На самом деле правильная индивидуальная реализация:

int n;
int[] ia = s1.Split(';').Select(s => int.TryParse(s, out n) ? n : 0).ToArray();
17
ответ дан 24 November 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: