在Scala中获取存储在数组中某些特定索引中的值

时间:2013-10-08 01:15:15

标签: arrays scala

我有一个String数组,让我们假设我想从数组中获取第三,第七和第十一个成员并将一些函数应用于这些数组。

我知道我可以像使用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))

1 个答案:

答案 0 :(得分:1)

试试这个:

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)