如何找到多维数组的每一行的总和

时间:2017-10-30 15:15:10

标签: ruby

我想找到一个多维数组的每一行的总和,并且总和是一个数组,例如,对于[[1,2,3],[1,1,1]],我想得到[6,3]

我尝试了以下内容:

arr = [[1,2,3],[3,2,1],[2,1,3]]
print arr.each{|row| row.each{|column| puts column}}

结果:

1
2
3
3
2
1
2
1
3
[[1, 2, 3], [3, 2, 1], [2, 1, 3]]

我正在努力。我仍然不完全理解each迭代器。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

对于ruby 2.4.0或更新版

a.map { |suba| suba.sum }

或只是

a.map(&:sum)

对于2.4.0之前的红宝石

a.map { |suba| suba.inject(0, :+) }

答案 1 :(得分:3)

[[1,2,3],[1,1,1]].map{|a| a.inject(0, :+)} # => [6, 3]

如果有可能任何子数组都为空,那么你需要添加初始<!DOCTYPE html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>ATP</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" type="text/css"> <link rel="stylesheet" href="node_modules/font-awesome/css/font-awesome.min.css" /> <link rel="stylesheet" href="node_modules/perfect-scrollbar/dist/css/perfect-scrollbar.min.css" /> <link rel="stylesheet" href="css/style.css" /> <link rel="stylesheet" href="css/checkbox-style.css"> <link rel="shortcut icon" href="images/favicon.png" /> </head> <body> <div class="container-scroller"> <div class="container-fluid"> <div class="row"> <div class="content-wrapper full-page-wrapper d-flex align-items-center auth-pages"> <div class="card col-lg-4 mx-auto"> <div class="card-body px-5 py-5"> <h3 class="card-title text-left mb-3">Login</h3> <form action="Login" method="post"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> <input type="text" class="form-control p_input" name="username" placeholder="Username"> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span> <input type="password" class="form-control p_input" name="password" placeholder="Password"> </div> </div> <div class="form-group d-flex align-items-center justify-content-between"> <div class="checkbox checkbox-primary"> <label><input type="checkbox">Remember me</label> </div> </div> <div class="text-center"> <button type="submit" class="btn btn-primary btn-block enter-btn">LOG IN</button> </div> </form> </div> </div> </div> </div> </div> </div> <script src="node_modules/jquery/dist/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script> <script src="node_modules/perfect-scrollbar/dist/js/perfect-scrollbar.jquery.min.js"></script> <script src="node_modules/bootstrap/dist/js/bootstrap.min.js"></script> <script src="js/misc.js"></script> </body> </html>,正如Ursus指出的那样。

'  word  \n'.strip()  # -> 'word'

答案 2 :(得分:1)

[[1,2,3],[1,1,1]].map { |a| a.inject(0, :+) } # => [6 , 3]
  1. map将每个元素更改为此元素块的返回值
  2. 使用inject(:+)
  3. 获取每个数组的总和
  4. 使用inject(0,:+)设置0而不是第一个元素作为起始值(处理空内部数组)
  5. 见:

答案 3 :(得分:0)

&#34;如何找到每一行的总和&#34;

arr = [[1,2,3], [1,1,1]]

print arr.each{|row|&lt; - 这里有每一行

所以现在row最初包含[1,2,3]。正如其他人所提到的,您可以在此处应用sum。 (你不需要领先的print)。

arr.each{|row| puts row.sum}

结果:

6
3

但更好的方法是使用map。正如我多年前告诉Ruby新手的那样,当你想要将每个元素改为其他元素时,可以考虑map,换句话说就是&#34; 1:1映射&#34;输入到输出。在这种情况下,输出为row.sum

sums = arr.map{|row| row.sum}

结果:

[6, 3]