gpt4 book ai didi

ruby - 如何在不展平其内容的情况下遍历嵌套数组?

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:00 25 4
gpt4 key购买 nike

我有一个包含数字对的数组:

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]

理想情况下,我想使用 Enumerator 进行迭代,因为我想在循环处理期间使用 #peek

我发现:

e = a.each
loop do
puts e.next
end

给出与上面的扁平化示例相同的输出,但在末尾附加了一个 nil

有没有办法在循环的同时保留数组成对的分组?

最佳答案

你只需要使用p,而不是puts。阅读此 p vs puts .

Kernel#puts 只是将数组视为一种特殊情况。它遍历项目并每行打印一个。我没有阅读来源,这只是我的理解。我刚刚从 source 确认,发现我的理解是正确的:-

 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 }

rb_io_puts说——

Writes the given objects to ios as with IO#print. Writes a record separator (typically a newline) after any that do not already end with a newline sequence.If called with an array argument, writes each element on a new line.If called without arguments, outputs a single record separator.

关于ruby - 如何在不展平其内容的情况下遍历嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24787050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com