问题标签 [tie]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 在 perl 中使用 tie::file 时得到一个空数组
我尝试在 perl 中使用 Tie::File 通过编写一小段代码来访问文件。但是,我通过运行下面的代码得到的“T_array”似乎是空的:
它的输出为 0,表示数组为空。“QtermsSorted.txt”是Linux下perl生成的。首先,我虽然可能是文件编码问题,但我尝试使用“iconv -t utf8 QtermsSorted.txt”来更改编码,但没有奏效。但是,当我使用在 Windows 8 中创建的 txt 文件时,输出大小是正确的。我想知道你是否可以告诉我出了什么问题以及如何解决它。先感谢您。
r - 创建捕获组最频繁出现的变量时如何标记关系?
在以下示例中,当我想确定组内最频繁的值时,如何要求 R 将平局识别为“平局”?
我基本上是从上一个问题开始的,它使用了 which.max 或 which.is.max 和一个自定义函数(创建一个按组捕获最频繁出现的变量),但我想承认这些关系是一个关系。有任何想法吗?
我想创建第三个变量 freq ,它包含 v1 中按 id 最常见的观察,但也创建了标识为“tie”的关系。
根据之前的答案,此代码可用于创建 freq 变量,但不处理关系:
perl - 两次评估只读变量时的不同结果
我注意到使用Readonly
模块声明的变量,多次评估一个变量会产生不同的结果。
这是为什么?似乎第一次用字符串解释变量,第二次用数字上下文解释变量。我的猜测是,如果它是数字,Math::BigInteger
模块将重载'*'
运算符,产生准确的结果。这是Readonly
模块中的错误吗,有什么办法可以避免吗?
我使用 perl 5.10 和 Readonly 1.03 没有Readonly::XS
.
我可以用
v5.10.0
上MSWin32-x86-multi-thread
(ActivePerl)v5.10.0
在 Linux 上x86_64-linux-thread-multi
。v5.12.0
在 Windows 上 (ActivePerl)
v5.14.2
但是, (ActivePerl)不会发生这种情况。
我还用 Readonly 1.04 复制了它。我不太确定这是否相关,但Scalar::Util::looks_like_number
行为类似:
c++ - 我们可以与 c++1y std::tie() 类似的函数进行深度绑定吗?
有没有办法std::tie
在 c++11/1y 中编写一个与元组密切相关的变体。也就是说,其中一个 tie((x,y),z) = make_tuple(make_tuple(1,2),3)
绑定x, y, z
到1, 2 and 3
,分别如下例所示。这会很好。谢谢。
c++ - 是否可以在 c++11 中扩展 std::tie 以接受占位符?
我想知道是否可以编写一个类似std::tie()
- 的函数(使用模板编程),它只能绑定元组的选择组件,并将其他组件绑定到一些占位符,例如std::bind()
. 如果是这样,只需要为他/她感兴趣的部分声明变量。
例如,
c++ - 使用 std::tie 作为循环目标的范围
我想做如下的事情:
但是,这不是有效代码,因为正如标准所说,基于范围的 for 循环被定义为等效于:
其中 for-range-declaration 定义为:
for-range-declaration:attribute-specifier-seq_{opt} decl-specifier-seq 声明符
那么让我退缩的是 decl-specifier-seq 没有标记为可选?
因此,似乎我必须为这个循环使用旧样式的循环:
但它在语法上似乎有点混乱,因为直觉上似乎是一个相当常见的任务,解包函数调用的结果,这在许多其他上下文中都是有效的。
有没有建议在语言中添加一些东西?这甚至是合理的想法吗?有没有更好的方法来做到这一点,我忽略了?我误读了标准吗?
显然,我可以组合我自己的函数来执行此操作,但使用起来也有点混乱。
database - Perl:在磁盘上存储巨大的哈希有问题吗?
我正在从事一个 Perl 项目,该项目涉及使用大约 1700 万个键构建散列。这太大了,无法存储在内存中(我的笔记本电脑的内存只能保存大约 1000 万个键)。我知道解决方案是将数据存储在磁盘上,但在实践中我无法执行此操作。这是我尝试过的:
数据库文件
这给了我一个分段错误:循环中的 11 部分,原因我不明白。
伯克利数据库
这似乎对大约前 1500 万个键很有效,但随后会显着减慢并最终在循环结束时完全冻结。我不认为这是一个内存问题。如果我将循环分成四部分,将它们放在四个单独的程序中,然后按顺序运行它们(每次向数据库添加约 400 万条记录),前三个成功完成,但第四个在数据库大约有 15 条时挂起万把钥匙。所以看起来 BerkeleyDB 可能只能处理大约 1500 万个哈希键???
DBM::深
从初步测试来看,这似乎工作正常,但它真的很慢:每千个键大约 5 秒,或者运行整个循环约 22 小时。如果可能的话,我宁愿避免这种情况。
I'd be very grateful for suggestions on troubleshooting one of these packages, or ideas about other options for accomplishing the same thing.
UPDATE
perl - 使用 BerkelyDB 将绑定哈希传递给子例程
我正在尝试将使用 BerkeleyDB 的绑定哈希传递给子例程并在例程中修改数据库的内容,但它不起作用。
但是当我运行它时:
所以看起来我可以从数据库中读取,但我不能写入它。为什么?
我尝试在子例程结束时执行 db_sync() ,但没有任何区别。
这是使用 BerkeleyDB 0.54 版的 Perl 5.14。它反过来使用 Berkeley DB 版本 6,创建版本 9 哈希表。
perl - 使用“each”进行迭代时从 DB_File 绑定哈希中删除项目不安全?
问题
我正在使用 NetBSD 6.1、Perl v5.18.1 和 DB_File v1.818。each
如果我使用并从哈希中删除每个项目来遍历与 DB_File 相关的哈希,则并非所有项目都被删除。这是一个演示问题的脚本:
当我运行它时,10 条记录中有 4 条(有时是 5 条)没有被删除:
如果我在 Linux(Ubuntu 14.04)系统上运行脚本,那么它总是可以工作(所有记录都已删除)。
如果我切换到foreach
按键循环,那么它可以在 NetBSD 和 Linux 上运行:
文档说什么
我无法找到任何明确说明在迭代时删除each
并不总是有效的东西。
这是我能够找到的:
的文档
foreach
说:foreach
如果 VAR 是一个并列或其他特殊变量,可能不会做你期望的事情。我不确定这是什么意思,但奇怪的
foreach
是它在哪里起作用。的文档
each
说:任何插入到散列中的操作都可能会更改顺序,任何删除操作也会更改顺序,但最近的键返回
each
或keys
可能会在不更改顺序的情况下被删除。对我来说,这意味着
delete
在迭代时对当前条目是安全的。的文档
DB_File
在迭代时没有提到删除。
问题
是不是这个问题:
- 由NetBSD 的 Berkeley DB 实现中的错误引起的?
- 由 DB_File 中的错误引起的?
- 的已知限制
each
? - 绑定哈希的已知限制?
- DB_File 绑定哈希的已知限制?
为什么foreach
在按键不起作用时起作用each
?
perl - Tie::File::AsHash 疑难解答
我正在尝试使用 Perls 的 Tie::File::AsHash 将大文件加载到哈希中。但是,它似乎得到了键而不是值。代码是
我正在对其进行测试的文件仅包含一行,最后一个数字后有一个制表符:
ENSMUSG00000020333|ENSMUST00000000145|54361198|54361535 AGAACGTTGCGGGGCGGGCGGCCCAGCCCCTCCCCCAGTCGGGCTCGGCAGTTCGGATGCCGCTAGATTGCTCTCTCACTTCTGGAGAAGATGCAGACCCAGGAGATCCTGAGGATCCTGCGGCTGCCCGAGCTATCGGACTTGGGCCAGTTTTTCCGCAGCCTCTCAGCTACCACCCTCGACGGTGGTGGAGCCCGGCGATCTGTGATTGGGGGTTGCACT
当我运行它时,我得到:在 ./test_hashes.pl 第 8 行第 2 行的连接 (.) 或字符串中使用未初始化的值。
有什么建议吗?提前致谢