我可以在不保留字符串实际内容的情况下对一堆值进行排序吗?双键排序一个来自内部另一个在云中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以在不保留字符串实际内容的情况下对一堆值进行排序吗?双键排序一个来自内部另一个在云中相关的知识,希望对你有一定的参考价值。

我想做什么

我想排序一堆字符串,很简单。

我的约束是什么?

我有原始文本存储在本地,其中包含我想要排序的真实文本,云有一些其他“列”的数据不是本地的,出于安全考虑,我无法从本地获取原始文本到云端。真正的限制是我不能在一个地方拥有所有数据,这会导致排序,难以在内部部署和云数据上进行分页。

我的想法(以及我需要帮助的地方)

也许我可以采用散列或其他方式从字符串中提取某些数据,使得原始字符串无法再现(处理安全事项),但提取的字符串足以让我可以对其进行排序。

本地数据:

[ { "id": 1, "name": "abcd" } ]

云数据:

[ { "id": 1, "price": "20" } ]

我需要在上面的例子中对价格和名称进行排序(想象一下100,000行这样的数据)。

答案

你需要做的是存储一对字符串和相应的id,例如在两个列表/数组中(无论您选择的编程语言提供什么)。 然后开始排序字符串,但每次移动字符串时,以相同的方式移动id。

或者,大多数编程语言都提供允许构建对的构造,然后根据字符串对这些对进行排序,这将自动移动ID。

两种方式都意味着在排序之后,您仍然可以找到每个字符串的id,然后使用该ID可以像往常一样访问相应的云数据。

作为示例,编程语言C提供复合数据类型构造

struct IdStringPair
{
    int id;
    char* string;
    /* actually just the address of where the full string is stored,
       but basically what you probably want to use */
};

几乎没有任何编程语言可以提供类似的东西。

相反,如果要排序的数据在云中,则必须在云中进行排序,即通过能够执行排序算法的事物。确保您将ID与密钥一起排序。然后找到非云字符串再次与之前相同。无论你以前做过什么来找到id的字符串,都要使用从云排序数据中获得的id。 这与第一种情况/解决方案相同,只是镜像。

核心概念是始终对ID以及密钥(和其他数据)进行排序,从而处理需要从clould和premise之间的差距的另一侧获取数据。这适用于分离数据排序的所有版本。

以上是关于我可以在不保留字符串实际内容的情况下对一堆值进行排序吗?双键排序一个来自内部另一个在云中的主要内容,如果未能解决你的问题,请参考以下文章

如何在不更改特定列的情况下对数据框中的数据进行重新采样?

如何在不获取“TypeError:字符串索引必须是整数”的情况下对图像进行 numpy 切片

我可以在不重新构建的情况下对 Maven 构建中的文件进行更改吗?

我可以在不涉及 gradle 的情况下对 Android 应用程序进行版本控制吗?

如何在不考虑最后一个空白行的情况下对 jqGrid 进行排序

是否可以在不使用 SQL 连接的情况下对不同年份进行每周比较?