gpt4 book ai didi

nim-lang - 如何在 Nim 中处理一个 seq 作为返回值

转载 作者:行者123 更新时间:2023-12-01 15:43:26 29 4
gpt4 key购买 nike

我在使用 Nim 序列并从函数返回它们时遇到了问题。

json_p.nim(42, 33) template/generic instantiation from here
json_p.nim(28, 22) Error: no generic parameters allowed for seq

第 28 行是我定义 key_list

的地方
proc get_json_keys(json_data: JsonNode) : seq =
var key_list: seq[string] = @[] # 28
var key: string
for record in json_data:
for key, value in record:
if (not key_list.contains(key)):
key_list.add(key)
return key_list

我只是从主调用它。

proc main() : void =     
var file = get_url()
var json_data = file.parseFile()

[...]

var key_list = get_json_keys(json_data)
for key in key_list:
echo key

代码在主函数中运行良好。

最佳答案

问题:

*seq 是一个通用的动态数组,你只能添加键,所有搜索都是线性的,因为它就像 C 语言数组。

*所有返回值的函数都有一个默认的“结果”命名变量。您应该使用它来返回您的值。

*使用“.contains”将使 nim 搜索整个数组以进行检查。最好的选择是使用具有快速搜索功能的容器。

我假设您需要:

*一个处理json重复键并返回具有快速键搜索的唯一列表的函数。

实现:

import json,tables

proc get_json_keys(json : JsonNode):OrderedTable[string,string]=
#initialize the result object
result = initOrderedTable[string,string]()
#more info,see https://nim-lang.org/docs/json.html
for key,value in json.pairs():
#debugging...
#echo key & "-" & value.getStr()
if not result.contains(key):
result[key]=value.getStr()

var json_data = parseJson("""{"key1" :"value1","key2" :"value2" }""")
var key_list = get_json_keys(json_data)
for key in key_list.pairs() :
echo key

输出:

(字段 0:“键 1”,字段 1:“值 1”)

(字段 0:“键 2”,字段 1:“值 2”)


如果搜索速度不是问题,也可以这样做:

使用seq实现:

proc get_json_keys(json : JsonNode):seq[string]=
result = newSeq[string](0)
for key,value in json.pairs():
if not result.contains(key):
result.add(key)

var json_data = parseJson("""{"key1" :"value1","key2" :"value2","key1":"value3" }""")
var key_list = get_json_keys(json_data)
echo key_list

输出:

@["key1", "key2"]

obs:编辑了我的答案,因为如果用“var”声明,seq 不是不可变的。只有用“let”声明时它才是不可变的。

关于nim-lang - 如何在 Nim 中处理一个 seq 作为返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45254859/

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