Dlang byLine复制跳行

标签 d

我有以下 D 程序,该程序应该将输入行分组为大小为 3 的组。

import std.stdio;
import std.range;
import std.array;

void main()
{
  while (!stdin.eof) {
    auto currentBlock = array(take(stdin.byLineCopy, 3));

    foreach (i, e; currentBlock) {
      writefln("%d) %s", i, e);
    }
  }
}

并给出以下输入

Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Pluto

它产生输出。

0) Mercury
1) Venus
2) Earth
0) Jupiter
1) Saturn
2) Uranus
0) Pluto

在每次迭代中跳过边界线(火星和海王星不在输出中)。我做错了什么?

最佳答案

stdin.byLineCopy calls popFront,这意味着在同一输入流上重复调用此函数将“跳过”元素。尝试在开始时仅创建一次 byLineCopy 范围:

void main()
{
    auto r = stdin.byLineCopy;
    while (!r.empty) {
        foreach (i, e; r.take(3).enumerate) {
          writefln("%d) %s", i, e);
        }
    }
}

您不需要检查 eof,因为 byLineCopy 应该处理该问题。

关于Dlang byLine复制跳行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43592430/

相关文章:

alias - 如何将 std.typecons.Typedef 与函数一起使用?

d - 从 D 中的 char[] 数组中删除空白字符

d - 创建用户定义的不可变对象(immutable对象)

multithreading - 线程本地,类实例本地存储?

d - 如何替换每个第二个元素?

d - 重写 D 中的 'package' 成员函数

syntax-highlighting - D 的 Nano 语法高亮规则

garbage-collection - D中的垃圾收集,指针和作用域

d - 如何使用具有默认值的所有参数调用结构体的自定义构造函数?

d - 有人可以解释D语言模板速记形式吗?