gpt4 book ai didi

聚合键包含数字的键值对的算法

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

我会尽力给出完整的问题定义。为了说明这个问题,我稍后会在我的问题中举一个例子。您可能想先跳转到示例,然后再阅读我的问题定义。

问题

我有一张代表键值对的 map 。键可以以 -NUMBER 结尾,其中 NUMBER 是一个整数。然而,也可能有不以破折号和数字结尾的键。

前导 -NUMBER 之前的键也可以包含破折号。

可能有多个键以相同的字符串开头并以不同的数字结尾。

也可能有多个以不同字符串开头并以数字结尾的键。

一般条件

  1. 所有键都是唯一的
  2. map 未排序
  3. key的顺序是随机的
  4. 可以安全地假设键中的所有字符串都是大写
  5. 如果有一个键以破折号和一个数字 n greater 结尾,则可以保证所有键都以相同的字符串开头并以所有结尾数字 m 和 1 <m <n 出现在 map 中。
  6. 以数字结尾的原始 key 是否保留在最终集合中并不重要

专注于解决方案

解决方案不应严格关注优化运行时或空间复杂性,而应关注可读性和可维护性。 map 中最多有大约 200 个条目,应用程序预计不会有高流量。

示例

输入:

{
"FIRST-KEY" = "FOO",
"SECOND-KEY-3"= "BAZ",
"THIRD-KEY-2" = "BAR",
"SECOND-KEY-1"= "FOO",
"SECOND-KEY-2"= "BAR",
"THIRD-KEY-1" = "FOO"
}

预期输出:

{
"FIRST-KEY" = "FOO",
"SECOND-KEY"= ["FOO", "BAR", "BAZ"],
"THIRD-KEY" = ["FOO", "BAR"]
}

或者(如果原始 key 保留在结果中):

{
"FIRST-KEY" = "FOO",
"SECOND-KEY-3"= "BAZ",
"THIRD-KEY-2" = "BAR",
"SECOND-KEY-1"= "FOO",
"SECOND-KEY-2"= "BAR",
"THIRD-KEY-1" = "FOO",
"FIRST-KEY" = "FOO",
"SECOND-KEY" = ["FOO", "BAR", "BAZ"],
"THIRD-KEY" = ["FOO", "BAR"]
}

最后的笔记

我的解决方案必须在 ColdFusion 中实现。我在问题开头必须称为 map 的输入称为 struct在 ColdFusion 土地上。

您可以在 ColdFusion 中制定您的答案(首选脚本语法),但您也可以选择您喜欢的任何其他语言(包括伪代码),只要您不使用我无法在 ColdFusion 中使用的另一种语言的标准库.

最佳答案

如果保证所有数字 1 ... n 都存在,一个简单的方法是循环遍历所有键名。对于每个键,使用正则表达式提取“组”名称(即 FIRST-KEYSECOND-KEY 等...)和可选的 -NUMBER 后缀。

results = {};

for (key in structKeyArray(yourStruct)) {

keyGroup = reReplaceNoCase(key, "(.+)-\d+$", "\1", "ALL");
insertAt = reReplaceNoCase(key, "[^\d+$]", "", "ALL");
isSequence = insertAt > 0;

// ....

如果数字 > 0,则设置一个 bool 标志,指示当前项是相似键序列的一部分。然后检查你之前是否处理过当前的“组”。如果不是,用一个空数组初始化它。

    if (isSequence && !results.keyExists( keyGroup )) {
results[ keyGroup ] = [];
}

最后,存储当前的“值”。如果当前项是序列的一部分,则将值插入现有数组。 (由于 -NUMBER 是顺序的,并且从 1 开始,它可以用作数组索引,确保以正确的顺序插入值。)否则,只需存储它作为一个简单的值。

    if (isSequence) {
results[ keyGroup ][ insertAt ] = yourStruct[ key ];
}
else {
results[ keyGroup ] = yourStruct[ key ];
}

} // end loop

关于聚合键包含数字的键值对的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55834531/

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