Arrays 获取存储在Scala数组中某些特定索引中的值
我有一个字符串数组,假设我想从数组中获取第三、第七和第十一个成员,并对这些数组应用一些函数 我知道我可以像使用if语句那样用java来实现,但我想用scala来实现 作为问题的补充,让我们假设原始字符串有多个用逗号分隔的单词。我想对第三、第七和第十一个成员应用上面提到的一些,而字符串的其余部分保持不变 换句话说,如果输入字符串是 i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 我想把它改成 i1,i2,f(i3),i4,i5,i6,f(i7),i8,i9,i10,f(i11) 目前,我是这样做的Arrays 获取存储在Scala数组中某些特定索引中的值,arrays,scala,Arrays,Scala,我有一个字符串数组,假设我想从数组中获取第三、第七和第十一个成员,并对这些数组应用一些函数 我知道我可以像使用if语句那样用java来实现,但我想用scala来实现 作为问题的补充,让我们假设原始字符串有多个用逗号分隔的单词。我想对第三、第七和第十一个成员应用上面提到的一些,而字符串的其余部分保持不变 换句话说,如果输入字符串是 i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 我想把它改成 i1,i2,f(i3),i4,i5,i6,f(i7),i8,i9,i10,f(i11
def process(lin1:String):String=
{
val line:Array[String]=lin1.split(";")
var iLength=line.length
var iTotalColumns=28
var i=0
var output:String=""
for( i<-0 to iLength-1){
var sTemp=line(i)
if((i==3)||(i==7)||(i==11))
def进程(lin1:String):String=
{
val行:数组[String]=lin1.split(“;”)
var iLength=线长度
var iTotalColumns=28
变量i=0
变量输出:String=“”
对于(i试试这个:
def selective(f: String => String, ixs: Seq[Int])(in: String) =
in.split(";").zipWithIndex
.map {
case (str, ix) if (ixs.contains(ix)) => f(str)
case other => other._1
}
示例调用:
scala> val input = "entry1;entry2;entry3;entry4;entry5;entry6;entry7;entry8;entry9;entry10;entry11"
input: String = entry1;entry2;entry3;entry4;entry5;entry6;entry7;entry8;entry9;entry10;entry11
scala> selective(_.toUpperCase, List(2,6,10))(input)
res3: Array[String] = Array(entry1, entry2, ENTRY3, entry4, entry5, entry6, ENTRY7, entry8, entry9, entry10, ENTRY11)
如何使选择性函数返回修改后的字符串。我感到困惑,因为选择性函数中的映射正在处理拆分的字符串。您是否在询问如何将结果数组[string]作为单个字符串返回?如果是,只需对结果使用mkString
(例如,…map{…}.mkString(;”)
)。问题是我可以执行mkString,但在调用时无法获取此值。抱歉,我是Scala的初学者。我是这样调用它的\n Scala.io.Source.fromFile(inputPath+fileName).getLines()map(l=>selective(func,List(1,2,3,26))(l))很抱歉,我不确定我是否理解此问题。如果希望选择性
返回字符串而不是数组[String]
,请使用tack.mkString(;)
在地图的末尾,在选择性的中。如果您想按照最新的注释在地图的各行上执行此操作,请将其固定在函数调用的末尾:…(l).mkString(;)
。如果这两种情况都不符合您的问题,也许可以将其分解为一个单独的问题?基本上,我只想打印scala.io.Source.fromFile(inputPath+fileName).getLines()map(l=>selective(func,List(1,2,3,26))(l))后面的行