首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组内重复元素从数组中的复杂删除

组内重复元素从数组中的复杂删除
EN

Stack Overflow用户
提问于 2020-04-15 08:21:58
回答 1查看 39关注 0票数 0

我有以下输入数据,为此,我希望删除每个组和每个子组中的重复元素(保留所有字符串的外观顺序)。一个组以一个与s5相关的字符串开始,在本例中,在“第一章”下面,下一组以“第二章”的第一次出现开始。每个组可以是与s4相关的子组。例如“第一部分”、“导言”、“第二部分”等。

输入类似于左边的列。第二列是显示组内和组/子组中每个字符串的出现情况的说明。第三列是预期的输出,第四列是我目前得到的输出。

我用黄色高亮显示了每个字符串的第一个外观,以便更好地显示输出中应该打印哪些元素。黄色的第一次出现在它们各自的组/子群中,去掉白色的所有线条,我们得到正确的输出。我希望这是合理的。

这是我当前的代码,其中的逻辑看起来是uniq值。输出类似但不正确,因为uniq值是对整个数组进行比较,而不是对每个组进行比较。

代码语言:javascript
运行
复制
a=<<_
s5>>FIRST CHAPTER
s4>>FIRST PART
s4>>INTRODUCTION
s3>>Article 1
s5>>FIRST CHAPTER
s4>>FIRST PART
s4>>INTRODUCTION
s3>>Article 2
s5>>FIRST CHAPTER
s4>>SECOND PART
s4>>REVIEW
s3>>Article 1
s5>>FIRST CHAPTER
s4>>SECOND PART
s4>>METHODOLOGY
s3>>Article1
s5>>SECOND CHAPTER
s4>>FIRST PART
s4>>INTRODUCTION
s3>>First section
s5>>SECOND CHAPTER
s4>>FIRST PART
s4>>INTRODUCTION
s3>>Second Section
_

b = a.split("\n")
c = b.uniq

puts c

希望有人能帮我做这件事。谢谢

输入和输出低于

代码语言:javascript
运行
复制
| Input                 | Output                |
|---------------------- |--------------------   |
| s5>>FIRST   CHAPTER   | s5>>FIRST CHAPTER     |
| s4>>FIRST   PART      | s4>>FIRST PART        |
| s4>>INTRODUCTION      | s4>>INTRODUCTION      |
| s3>>Arcticle   1      | s3>>Arcticle 1        |
| s5>>FIRST   CHAPTER   | s3>>Arcticle 2        |
| s4>>FIRST   PART      | s4>>SECOND PART       |
| s4>>INTRODUCTION      | s4>>REVIEW            |
| s3>>Arcticle   2      | s3>>Arcticle 1        |
| s5>>FIRST   CHAPTER   | s4>>METHODOLOGY       |
| s4>>SECOND   PART     | s3>>Arcticle1         |
| s4>>REVIEW            | s5>>SECOND CHAPTER    |
| s3>>Arcticle   1      | s4>>FIRST PART        |
| s5>>FIRST   CHAPTER   | s4>>INTRODUCTION      |
| s4>>SECOND   PART     | s3>>First section     |
| s4>>METHODOLOGY       | s3>>Second Section    |
| s3>>Arcticle1         |                       |
| s5>>SECOND   CHAPTER  |                       |
| s4>>FIRST   PART      |                       |
| s4>>INTRODUCTION      |                       |
| s3>>First   section   |                       |
| s5>>SECOND   CHAPTER  |                       |
| s4>>FIRST   PART      |                       |
| s4>>INTRODUCTION      |                       |
| s3>>Second   Section  |                       |
EN

回答 1

Stack Overflow用户

发布于 2020-04-18 01:40:07

我将通过查看每个元素的所有父元素来处理这个问题。

考虑一下名为s3>>Arcticle 1 sic的元素,它从图表的顶部第4位开始。要查找重复的元素,只看其他S3级元素是不够的。其他一些S3级元素有不同的父级。例如,第12行中的S3级别元素有不同的S4级别不同的父元素。

但实际上,您的代码目前正在忽略父母。它正在调用b.uniq,它将只查看该元素的文本表示形式,例如"s3>>Arcticle 1“。"s3>>Arcticle 1“没有关于父元素的信息,您可以看到;它是第4行的"s3>>Arcticle 1”还是第12行?第4行中有一个名为"s4>>FIRST部件“的父级,而第12行中有一个名为"s4>>SECOND部件”的父级。

要了解我在说什么,请在调用b.uniq之前停止,并打印出b的全部内容。您将看到b中的每个元素都没有父级信息。父信息位于b中的另一个元素中,但b中目前没有任何东西可以将元素与它们的父元素绑定在一起。

需要做的是,检查每个元素,看看是否有其他元素是相同的,以及在每个层次上都有相同的父母。如果是这样,则该元素将真正成为要删除的副本。

在Ruby中,有很多方法可以做到这一点。我建议首先考虑可以用代码编写的数据结构,这将完全代表每个元素及其父元素。这样就可以将数据结构相互比较,并删除重复的数据结构。

我建议从结构开始使用潜在的数据结构。当然还有其他方法来解决这个问题,但希望这会让事情开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61224338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档