Ruby 如何迭代嵌套数组而不展平其内容?
我有一个带有成对数字的数组:Ruby 如何迭代嵌套数组而不展平其内容?,ruby,arrays,enumerator,Ruby,Arrays,Enumerator,我有一个带有成对数字的数组: a = [[4, 6], [3, 0], [0, 0]] 当我这样做时: a.each do |x| puts x done 我得到一组平坦的值: 4 6 3 0 0 0 我希望值保持成对: [4,6] [3,0] [0,0] 理想情况下,我希望使用枚举器进行迭代,因为我希望在循环处理期间使用#peek 我发现: e = a.each loop do puts e.next end 给出了与上面展平示例相同的输出,并在末尾添加了一个nil 有没有一
a = [[4, 6], [3, 0], [0, 0]]
当我这样做时:
a.each do |x|
puts x
done
我得到一组平坦的值:
4
6
3
0
0
0
我希望值保持成对:
[4,6]
[3,0]
[0,0]
理想情况下,我希望使用枚举器进行迭代,因为我希望在循环处理期间使用#peek
我发现:
e = a.each
loop do
puts e.next
end
给出了与上面展平示例相同的输出,并在末尾添加了一个nil
有没有一种方法可以在循环的同时保持数组成对分组?您只需要使用p
,而不是put
。读这个
Kernel#put
只是将数组视为一种特殊情况。它在项目上循环并每行打印一个。我没有读过《源》,这只是我的理解。我刚从确认,发现我的理解是正确的:-
io_puts_ary(VALUE ary, VALUE out, int recur)
6814 {
6815 VALUE tmp;
6816 long i;
6817
6818 if (recur) {
6819 tmp = rb_str_new2("[...]");
6820 rb_io_puts(1, &tmp, out);
6821 return Qtrue;
6822 }
6823 ary = rb_check_array_type(ary);
6824 if (NIL_P(ary)) return Qfalse;
6825 for (i=0; i<RARRAY_LEN(ary); i++) {
6826 tmp = RARRAY_AREF(ary, i);
6827 rb_io_puts(1, &tmp, out);
6828 }
6829 return Qtrue;
6830 }
io\u-put\u-ary(VALUE-ary、VALUE-out、int-recur)
6814 {
6815值tmp;
6816长i;
6817
6818如果(再次发生){
6819 tmp=rb_str_new2(“[…]”);
6820 rb_io_输出(1和tmp输出);
6821返回Qtrue;
6822 }
6823 ary=rb\U校验\U数组\U类型(ary);
6824如果(无)返回Qfalse;
6825对于(i=0;i您只需要使用p
,而不是put
。请阅读此内容
Kernel#put
只是将数组视为一种特殊情况。它在项目上循环并每行打印一个。我没有阅读源代码,这只是我的理解。我刚刚从中确认,发现我的理解是正确的:-
io_puts_ary(VALUE ary, VALUE out, int recur)
6814 {
6815 VALUE tmp;
6816 long i;
6817
6818 if (recur) {
6819 tmp = rb_str_new2("[...]");
6820 rb_io_puts(1, &tmp, out);
6821 return Qtrue;
6822 }
6823 ary = rb_check_array_type(ary);
6824 if (NIL_P(ary)) return Qfalse;
6825 for (i=0; i<RARRAY_LEN(ary); i++) {
6826 tmp = RARRAY_AREF(ary, i);
6827 rb_io_puts(1, &tmp, out);
6828 }
6829 return Qtrue;
6830 }
io\u-put\u-ary(VALUE-ary、VALUE-out、int-recur)
6814 {
6815值tmp;
6816长i;
6817
6818如果(再次发生){
6819 tmp=rb_str_new2(“[…]”);
6820 rb_io_输出(1和tmp输出);
6821返回Qtrue;
6822 }
6823 ary=rb\U校验\U数组\U类型(ary);
6824如果(无)返回Qfalse;
6825(i=0;iAs Arup的回答说,您已经获得成对的分组,但是puts
将在单独的行上打印数组元素。尝试放置一个,看看您得到了什么。正如Arup的回答所说,您已经获得成对的分组,但是puts
将在单独的行上打印数组元素。尝试putsa
看看你得到了什么。谢谢,我想这让我渡过了难关!谢谢,我想这让我渡过了难关!