gpt4 book ai didi

algorithm - 从列表中计算增量

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:25 25 4
gpt4 key购买 nike

我有这个列表:

  • 添加X
  • 添加Y
  • 删除 Z
  • 添加X
  • 不采取行动是

我需要这个结果:

  • 添加X
  • 不采取行动是
  • 删除 Z

计算增量的规则如下:我有 3 个操作(添加、删除、无操作)

  1. 任何行动 * 没有行动 = 没有行动
  2. 添加 * 删除或删除 * 添加 = 无操作
  3. 相同的 Action * 相同的 Action = 相同的 Action

问题是我使用函数式语言 (XQuery) 来实现它。我找到了一个基于 fn:distinct-values 的逻辑。但是最后一个规则(3)不满足。

提前致谢!

最佳答案

你没有提到你使用的是什么 XQuery 处理器,但如果它有 HashMap ,你可以这样做(在 MarkLogic Server 中测试):

let $seq := ("ADD X", "ADD Y", "REMOVE Z", "ADD X", "NO-ACTION Y")
let $map := map:map()
let $_ :=
for $s in $seq
let $parts := fn:tokenize($s, " ")
let $service := $parts[2]
let $action := $parts[1]
let $current-action := map:get($map, $service)
return
if ("NO-ACTION" = ($action, $current-action)) then
map:put($map, $service, "NO-ACTION") (: rule 1 :)
else if ("REMOVE" = ($action, $current-action)) then
map:put($map, $service, "REMOVE") (: rule 2 :)
else
map:put($map, $service, $action) (: actions are the same -- rule 3 :)
for $service in map:keys($map)
return fn:concat(map:get($map, $service), " ", $service)

返回

ADD X 
REMOVE Z
NO-ACTION Y

请注意,我做了一个简化假设并将“NO ACTION”更改为“NO-ACTION”以使解析更简单。

关于algorithm - 从列表中计算增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268347/

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