如何分配ID以标识重复的数组元素?

角色扮演

我有一个多维数组,其中包含一个字符串和每个元素的另一个数组。

duplicates = 
[["link_A", [247936, 672212, 248156, 671720]],    
 ["link_B", [247936, 672212, 248156, 671720]],    # Same coordinates as previous line
 ["link_C", [247936, 672212, 248156, 671720]],    # Same coordinates as previous line
 ["link_D", [247471, 671767, 247567, 671846]],
 ["link_E", [247471, 671767, 247567, 671846]],    # Same coordinates as previous line
 ["link_F", [247567, 671846, 247775, 671680]],
 ["link_G", [247567, 671846, 247775, 671680]]]    # Same coordinates as previous line

我有我想要的格式的数据,以便使用“ each”遍历“ duplicates”数组并将数据导出到.csv。

此时,我唯一想要的是为每个具有相同坐标的重复项分配一个ID /编号。很高兴将其作为数组中的元素,例如:

所需输出:

duplicates = 
[["1", "link_A", [247936, 672212, 248156, 671720]],    
 ["1", "link_B", [247936, 672212, 248156, 671720]],    # Same coordinates as previous line
 ["1", "link_C", [247936, 672212, 248156, 671720]],    # Same coordinates as previous line
 ["2", "link_D", [247471, 671767, 247567, 671846]],
 ["2", "link_E", [247471, 671767, 247567, 671846]],    # Same coordinates as previous line
 ["3", "link_F", [247567, 671846, 247775, 671680]],
 ["3", "link_G", [247567, 671846, 247775, 671680]]]    # Same coordinates as previous line

最好的方法是什么?

非常感谢。

编辑:

感谢您的回复。当前的3个答案(来自1. Siim Liiser,2。Cary Swoveland和3. iGian)都对我有效,但略有不同(我相信-如果我错了,请纠正我!):

  1. 不变异“重复项” //不按顺序假设
  2. 不变异“重复项” //按顺序假定重复项
  3. 突变“重复项” //不按顺序假设

我没有在问题中提到它,但我对重复项本身是变异的还好。我以前曾使用过“ group_by”(下面提供了更多信息)来创建重复项,因此顺序也不重要。再次感谢。


最初的原始数组(在下面称为“ segment_store”)包含链接名称(例如“ link_A”)和一个坐标数组(两个XY坐标)-这些代表链接段。在寻找重复项时,我使用了:

duplicates = segment_store.group_by{|i| i[1]}.select{|k,v| v.length > 1}.values.flatten(1)

获得与原始问题相同的副本(预编辑)。

辛·利瑟(Siim Liiser)

这是一个使用无限枚举器保存id并使用哈希表来缓存数组首次出现的解决方案。

enum = 1.step
duplicates.each_with_object({}).map do |(string, array), cache|
  [cache[array] ||= enum.next, string, array]
end

调用.to_s第一个元素可获得与您相同的结果。

平均而言,应该是O(n)的时间,且O(n)的额外空间。

不假定重复项是连续的。如果它们在您的示例中始终是连续的,那么不同的算法可能会更节省空间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在MongoDB中计算数组重复元素

来自分类Dev

处理重复的数组元素

来自分类Dev

如何计算重复的数组元素?(javascript)

来自分类Dev

存储重复的数组元素

来自分类Dev

如何从多维数组中删除一些重复的元素

来自分类Dev

删除重复的数组元素

来自分类Dev

该代码如何消除重复的数组元素?

来自分类Dev

如何在数组中查找和写下重复的元素?

来自分类Dev

删除重复的数组元素

来自分类Dev

如何使用流API从Integer数组中删除重复的元素

来自分类Dev

如何随机而不是重复地从数组中选择元素?

来自分类Dev

如何为每个元素分配不同的ID

来自分类Dev

如何获取没有对象元素重复的数组

来自分类Dev

如何获取连续元素数组对象的重复键值的计数?

来自分类Dev

如何遍历数组多次而不重复求和的元素

来自分类Dev

如何在MongoDB中计算数组重复元素

来自分类Dev

如何为特定类型的所有HTML元素分配标识符?

来自分类Dev

如何获得红宝石数组中重复元素的索引

来自分类Dev

如何在Java中分配数组中的元素数?

来自分类Dev

数组中的元素重复

来自分类Dev

存储重复的数组元素

来自分类Dev

如何在Python中的数组中重复元素?

来自分类Dev

如何删除多维数组中的重复元素?

来自分类Dev

如何以浮点精度查找数组中的重复元素?

来自分类Dev

如何在PHP中合并此数组的重复元素?

来自分类Dev

如何对数组中重复元素的值求和

来自分类Dev

为CSS样式分配JavaScript数组元素类或ID

来自分类Dev

为二维数组的重复元素分配相同的字典顺序

来自分类Dev

如何发现重复的 HTML 元素 ID?