在下面的代码中,从List
删除元素后,应重新创建val originalOrdering
List
的排序。
如果val random3ElementStringList
取值List(3, 4, 1)
,则应将列表重新排序为List(1 , 3 , 4)
原始列表val originalOrdering
的值为1,2,3,4
,但不会显示List
中可包含的值。该列表可以包含除数字以外的字符。
import scala.collection.immutable._
object sort extends App {
val originalOrdering : List[String] = List("1" , "2" , "3" , "4");
var random3ElementStringList : List[String] = util.Random.shuffle(originalOrdering).take(3)
val stringPositions : Map[String , Int] = originalOrdering.zipWithIndex.toMap
println(random3ElementStringList)
println(stringPositions);
val fl = random3ElementStringList.foldLeft("")((a , b) => (stringPositions.get(b)+","))
println(fl)
}
此代码的输出为:
List(2, 3, 4)
Map(1 -> 0, 2 -> 1, 3 -> 2, 4 -> 3)
Some(3),
但是fl
应该按照排序顺序包含句子,其中排序由stringPositions
更新:
import scala.collection.immutable._
object sort extends App {
def reOrder(originalList : List[String] , originalListSubset : List[String]) = {
val stringPositions : Map[String , Int] = originalList.zipWithIndex.toMap
val fl : List[(String , Int)] = originalListSubset.map(m => (m , stringPositions.get(m).get))
fl.sortBy(s => s._2).map(m => m._1)
}
val originalList : List[String] = List("a" , "b" , "c" , "f");
var random3ElementStringList : List[String] = util.Random.shuffle(originalList).take(3)
println(random3ElementStringList)
println(reOrder(originalList , random3ElementStringList))
random3ElementStringList = util.Random.shuffle(originalList).take(2)
println(random3ElementStringList)
println(reOrder(originalList , random3ElementStringList))
}
答案 0 :(得分:1)
您忘了在折叠功能中使用a
。它是折叠的“累加器”。你可以像这样解决它:
val fl = random3ElementStringList.foldLeft("") { (acc, index) =>
acc +","+ stringPositions.get(index)
}
我更改了参数名称以使其更清晰。这是输出:
List(3, 4, 2)
Map(1 -> 0, 2 -> 1, 3 -> 2, 4 -> 3)
,Some(2),Some(3),Some(1)
你可以在开头摆脱那个逗号,但我会建议你一个没有foldLeft
的更简单的解决方案:
val fl = random3ElementStringList.map(stringPositions.get).mkString(",")
您可以映射这些随机索引并获取元素,然后使用给定的分隔符创建一个字符串。输出为Some(2),Some(3),Some(1)
。