none
Сложение элементов массива RRS feed

  • Вопрос

  • Добрый день.

    Каким образом можно сложить значения элементов одномерного массива, к примеру, 1 2 3 4?

    Из языка С на ум пришло

    x:=0;
    for (i=0;i<=3;i++)
        { x:=x+arr[i] }
    
    но таким образом посчитать в PS у меня не получается. В переменной $x всё тот же массив.

    6 августа 2015 г. 8:40

Ответы

  • $x = @(1, 2, 3, 4)
    
    $x | foreach {$summ += $_}
    
    $summ



    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа nskalinin 6 августа 2015 г. 9:06
    6 августа 2015 г. 8:51
    Модератор
  • Не совсем понимаю какие у вас данные содержатся в $_.groups[1].value, но если $x - строка чисел, то видимо числа. Попробуйте их сразу преобразовать в числа и складывать как числа, а не как символы в строку.

    Такой вариант:

    [int]$x = 0
    $str=Get-Content C:\klaes\fen76\_baz2\Daten\*.g05 [regex]::Matches($str,'(?<=;)(\d{1,2}\s)') | ForEach-Object {$x+=[int]$_.groups[1].value} $sum

    Если там числа большие (больше 65 тысяч), то int на int32 поменяйте, если дробные, то на double ну и т.д.

    Если не подходит, дайте пример $str, чтобы понятней было.



    • Помечено в качестве ответа nskalinin 6 августа 2015 г. 11:02
    • Изменено Семен Герасимов 6 августа 2015 г. 11:22 лишняя строка в скрипте
    6 августа 2015 г. 10:59

Все ответы

  • $x = @(1, 2, 3, 4)
    
    $x | foreach {$summ += $_}
    
    $summ



    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа nskalinin 6 августа 2015 г. 9:06
    6 августа 2015 г. 8:51
    Модератор
  • $arr = @(1,2,3,4,5)
    for ($i -eq 0;$i -lt $arr.Count;$i++)
    {
    $x += $arr[$i]
    }
    $x



    6 августа 2015 г. 8:53
  • Добрый день.

    Каким образом можно сложить значения элементов одномерного массива, к примеру, 1 2 3 4?

    Из языка С на ум пришло

    x:=0;
    for (i=0;i<=3;i++)
        { x:=x+arr[i] }
    но таким образом посчитать в PS у меня не получается. В переменной $x всё тот же массив.

    судя по тому что вы написали массив у вас в переменной arr

    А в Х у вас сумма


    The opinion expressed by me is not an official position of Microsoft

    6 августа 2015 г. 9:02
    Модератор
  • $str=Get-Content C:\klaes\fen76\_baz2\Daten\*.g05
    [regex]::Matches($str,'(?<=;)(\d{1,2}\s)') | ForEach-Object {$x+=$_.groups[1].value}
    $x | foreach {$sum+=$_}
    $sum
    Вот мой код. У меня в $x тип данных String. Подскажите как его сконвертировать в Object?
    6 августа 2015 г. 9:08
  • Не совсем понимаю какие у вас данные содержатся в $_.groups[1].value, но если $x - строка чисел, то видимо числа. Попробуйте их сразу преобразовать в числа и складывать как числа, а не как символы в строку.

    Такой вариант:

    [int]$x = 0
    $str=Get-Content C:\klaes\fen76\_baz2\Daten\*.g05 [regex]::Matches($str,'(?<=;)(\d{1,2}\s)') | ForEach-Object {$x+=[int]$_.groups[1].value} $sum

    Если там числа большие (больше 65 тысяч), то int на int32 поменяйте, если дробные, то на double ну и т.д.

    Если не подходит, дайте пример $str, чтобы понятней было.



    • Помечено в качестве ответа nskalinin 6 августа 2015 г. 11:02
    • Изменено Семен Герасимов 6 августа 2015 г. 11:22 лишняя строка в скрипте
    6 августа 2015 г. 10:59
  • Спасибо, в данном варианте работает.

    А в $_.groups[1].value у меня символ строки (в исходном файле является числом).

    6 августа 2015 г. 11:05