【问题标题】:How to insert sort function inside a for loop in Julia?如何在 Julia 的 for 循环中插入排序函数?
【发布时间】:2018-02-14 06:29:33
【问题描述】:

我在 Julia 中使用了一些字符串,并创建了一个简单的 for 循环来将某些单词的频率存储在字典中。

假设我有这个字符串

x="hola perro hola te huele tu patita perro perro cola colita hola hola hola sí como no"

然后我将 y 定义为 split(x) 和一个空字典

y=split(x, r"\W", keep=false)
c=Dict{String,Int64}()

最后是循环和循环外的排序函数,以获得前3个单词:

for i in y
    c[i]=get(c,i,0)+1
end

c= sort(collect(c),by=tuple -> last(tuple),rev=true)[1:3]

在循环中插入最后一个命令时出现此错误:

for i in y
    c[i]=get(c,i,0)+1
    c= sort(collect(c),by=tuple -> last(tuple),rev=true)[1:3]
end


BoundsError: attempt to access 1-element Array{Pair{String,Int64},1} at index [1:3]

为什么会这样?为什么在 for 循环中排序会引发 BoundsError?是否可以使用任何其他方法完成我想要的? 任何帮助将不胜感激

【问题讨论】:

  • 你能解释一下你想通过在一个循环中移动一个作用于整个字典的函数来实现什么吗?
  • 我只想让 for 循环检索到“c”。也就是说,使用单个 for 循环获得与第三个块中显示的结果相同的结果。
  • 首先,在这种情况下,sort 函数将被调用 i 次(即使它以这种方式工作)而不是只调用一次,这可能是您不需要的。其次,在您正在构建的字典只有 1 或 2 个元素的地方,您根本无法访问元素 1 到 3。
  • 我解决了定义函数的问题。无论如何,我只是想知道是否可以在 for 循环中插入“排序”。谢谢!

标签: string sorting for-loop julia


【解决方案1】:

虽然cDict{String,Int64}(),但对c = sort(collect(c)...) 的调用会用成对向量(Array{Pair{String,Int64},1}) 覆盖它。 因此它不是循环工作的。

如果您希望Dict 仅包含您可以使用的最常见的 3 个条目:

c = Dict(sort(collect(c),by=tuple -> last(tuple),rev=true)[1:3])

但您可能已经知道,Dict 没有 oder。有来自模块DataStructuresOrderedDict 用于此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    相关资源
    最近更新 更多