arrays - 为什么文本行数组看起来有一个额外的容器级别?

我正在使用 Dyalog 的 ⎕nget 的“行数组”模式读取文件:

lines _ _ ← ⎕nget '/usr/share/dict/words' 1

它似乎有效:

          lines[1]
 10th

但是单个元素似乎不是字符数组:

          line ← lines[1]
          line
 10th
          ≢ line
1
          ⍴ line
     

这里我们看到第一行的计数为 1,形状为空数组。我无法进一步索引它; lines[1][1]line[1] 是 RANK ERROR。如果我在 RHS 上使用 ⊂,我可以一次将值分配给多个变量,并为每个变量获得相同的行为。但是,如果我在左鞋的情况下进行多项作业,我会得到:

          word rest ← line
          word
10th
          ≢ word
4
          ⍴ word
4

终于得到了我所期望的字符数组!然而,它并没有明显地与 line 中隐藏的任何其他内容分开;另一个变量是相同的:

          rest
10th
          ≢ rest
4
          ⍴ rest
4
          word ≡ rest
1

值得注意的是,当我查看 word 时,它没有前导空格,这与 line 不同。所以看起来 ⎕nget 返回的内容矩阵中的各个数组元素被进一步包裹在一些没有显示形状或计数的东西中,并且无法被索引,但是当我使用解构赋值来解包它们。这感觉很像 Common Lisp 中的多值东西。

如果有人能解释这里发生了什么,我将不胜感激。我觉得我缺少一些非常基本的东西。

最佳答案

使用“行数组”模式读取文件的结果是一个嵌套数组。它特别是一个字符向量的嵌套向量,其中每个字符向量都是文本文件中的一行。

例如这里取\tmp\test.txt:

my text file
has 3
lines

如果我们读入这个,我们可以检查内容

      (content newline encoding) ← ⎕nget'\tmp\test.txt' 1
      ≢ content     ⍝ How many lines?
3
      ≢¨content     ⍝ How long is each line?
12 5 5
      content[2]    ⍝ Indexing returns a scalar (non-simple)
┌─────┐
│has 3│
└─────┘
      2⊃content     ⍝ Use pick to get the contents of the 2nd scalar
has 3
      ⊃content[2]   ⍝ Disclose the non-simple scalar
has 3

正如你可能read from the online documentation ,⎕NGET 的默认行为是引入一个带有嵌入换行符的简单(非嵌套)字符向量。这些通常取决于操作系统。

      (content encoding newline) ← ⎕nget'\tmp\test.txt' 
      newline   ⍝ Unicode code points for line endings in this file  (Microsoft Windows)
13 10
      content
my text file
has 3       
lines       
            
      content ∊ ⎕ucs 10 13
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

但是使用“行数组”模式,您会得到一个嵌套结果。

有关嵌套数组和数组模型的快速介绍,请参阅 Stefan Kruger's LearnAPL book .

https://stackoverflow.com/questions/69945679/

相关文章:

python - 如何根据字典键和值过滤 Pandas 数据框行?

javascript - 从数组中创建 N 位随机单词

r - 如何编写一个 apply() 函数来将矩阵列中的每个元素限制为最大允许值?

list - 如何更新 Haskell 中的列表元素

typescript - @typescript-eslint/naming-convention

javascript - 如何使用 "onclick"方法获取数据属性?

intellij-idea - 如何将项目从 IDEA 连接到 Gitlab

flutter - 无法将类型为 'String' 的值分配给 flutter Getx 中类型为

javascript - 如何在 react-native 中结合使用 Drawer Navigat

android - 找不到实现(房间)