2016-04-04 2 views
1

Есть ли простой способ преобразования строки с разделителями-запятыми в LinkedHashSet в Scala? Цель состоит в том, чтобы удалить дубликаты в строке, но для этого нужен цикл FOR. Поэтому я подумал, что могу просто разбить String на коллекцию, такую ​​как LinkedHashSet, которая может сохранить исходный порядок, а также удалить дубликаты. Я провел некоторое исследование, но не нашел пути. Поэтому просто хочу подтвердить здесь, если это возможно.Как преобразовать строку с разделителями-запятыми в LinkedHashSet в Scala

Например, для строки:

aaa, bbb, ccc, aaa, ddd 

Я хочу сделать, чтобы быть:

aaa, bbb, ccc, ddd 

Благодаря

ответ

4

Вы действительно не нужно LinkedHashSet. коллекции Scala имеют удобный метод distinct:

"aaa, bbb, ccc, aaa, ddd".split(", ").distinct.mkString(", ") 

Производит:

res0: String = aaa, bbb, ccc, ddd 
+0

Это путь Scala! Просто поясните: возьмите «String», превратите его в некоторый список строк и превратите его в «отдельный» список. Вот и все. –

+0

@ isaias-b, строго говоря, нет никакого преобразования в «Список». 'split' возвращает' Array [String] ', который неявно завернут в' ArrayOps [String] ', который расширяет' SeqLike [String] ', где определен' distinct'. – Aivean

+1

Мне было слишком лениво искать точные типы, но вы абсолютно правы! ;) –

3

Это так просто, как это:

import scala.collection.mutable.LinkedHashSet 
scala> "aaa, bbb, aaa, ccc, ddd".split(", ").to[LinkedHashSet] 
res12: scala.collection.mutable.LinkedHashSet[String] = Set(aaa, bbb, ccc, ddd) 

Вы можете использовать ListSet что неизменен, а также, хотя набор будет в порядке, обратном

scala> import scala.collection.immutable.ListSet 
scala> "aaa, bbb, aaa, ccc, ddd".split(", ").to[ListSet] 
res0: scala.collection.immutable.ListSet[String] = ListSet(ddd, ccc, bbb, aaa) 
scala> res0.toList.reverse 
res1: List[String] = List(aaa, bbb, ccc, ddd) 
+0

большое спасибо – jlp

Смежные вопросы