我有以下输入数据,为此,我希望删除每个组和每个子组中的重复元素(保留所有字符串的外观顺序)。一个组以一个与s5
相关的字符串开始,在本例中,在“第一章”下面,下一组以“第二章”的第一次出现开始。每个组可以是与s4
相关的子组。例如“第一部分”、“导言”、“第二部分”等。
输入类似于左边的列。第二列是显示组内和组/子组中每个字符串的出现情况的说明。第三列是预期的输出,第四列是我目前得到的输出。
我用黄色高亮显示了每个字符串的第一个外观,以便更好地显示输出中应该打印哪些元素。黄色的第一次出现在它们各自的组/子群中,去掉白色的所有线条,我们得到正确的输出。我希望这是合理的。
这是我当前的代码,其中的逻辑看起来是uniq值。输出类似但不正确,因为uniq值是对整个数组进行比较,而不是对每个组进行比较。
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
希望有人能帮我做这件事。谢谢
输入和输出低于
| 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 | |
发布于 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中,有很多方法可以做到这一点。我建议首先考虑可以用代码编写的数据结构,这将完全代表每个元素及其父元素。这样就可以将数据结构相互比较,并删除重复的数据结构。
https://stackoverflow.com/questions/61224338
复制相似问题