为var in loop

时间:2017-06-05 09:28:29

标签: scala

无法访问var in循环。为什么?感谢。

   var grupo = "A"
   for (a <- dataframe) {
        grupo = "B"
    }
    println(grupo) //Print A

编辑!

dataframe filterP显示如下:

|   CODIGO|LISTA|NUMERO|OPCION|NUMERO|OP|VALOR|
+---------+-----+------+------+------+--+-----+
|110111001|    P|  0000|     A|  0000| 1|    1|
|110111001|    P|  0000|     A|  0000| 1|    1|
|110111001|    P|  0000|     A|  0000| 1|    2|
|110111001|    P|  0000|     A|  0000| 1|    3|
|110111001|    P|  0000|     A|  0000| 1|    1|
|110111001|    P|  0000|     B|  0000| 1|    2|

代码:

var grupo = List(filterP.first()(3).toString())
   var grupo_tmp = grupo(0)
   println("first group:" + grupo(0))
   for (a <- filterP) {
       if(grupo_tmp != a(3).toString()){
         println(grupo_tmp + "|" + a(3).toString())
         grupo = a(3).toString() :: grupo
         grupo_tmp = a(3).toString()
       }
    }
    println(grupo_tmp)
    println("Grupos de lista "+grupo.length)
    for(i <- 0 to grupo.length-1){ 
      println("grupo: "+ grupo(i))
    }

此印刷品:

   first group:A
   A|B
   A
   Grupos de lista 1
   grupo: A

我不知道问题出在哪里..

2 个答案:

答案 0 :(得分:2)

它肯定可以访问var内部循环。

  • 也许你在一个名为grupo
  • 的循环中有一个单独的变量
  • 也许你的循环根本不符合条件,这意味着dataframe是空的。
  • 尝试在循环中打印a进行调试。

参见示例

scala> var grupo = "A"
grupo: String = A

scala> for (a <- Array("MUTATE-1", "MUTATE-2")) { grupo = a }

scala> grupo
res6: String = MUTATE-2

答案 1 :(得分:1)

我想知道如果你没有收集for filterPdataframe循环是如何工作的。 for循环只是transformationprintln action不应该在dataframe上执行Dataframes

dataframe由dafault分区,我猜测你的dataframe已被分区,而你只得到部分输出。

driver收集到var grupo = List(filterP.first()(3).toString()) var grupo_tmp = grupo(0) println("first group:" + grupo(0)) for (a <- filterP.collect) { //collect the dataframe to the driver if(grupo_tmp != a(3).toString()){ println(grupo_tmp + "|" + a(3).toString()) grupo = a(3).toString() :: grupo grupo_tmp = a(3).toString() } } println(grupo_tmp) println("Grupos de lista "+grupo.length) for(i <- 0 to grupo.length-1){ println("grupo: "+ grupo(i)) } 应解决问题

first group:A
A|B
B
Grupos de lista 2
grupo: B
grupo: A

我得到输出为

float target = 100.0f;
int index = -1;
float nearest = float.MaxValue;
int count = objectList.Count;
for(int i = count-1; i >= 0; i--)
{
   var diff = Math.Abs(objectList[i].value - target);
   if(diff < nearest)
   {
       nearest = diff;
       index = i;
   }
   if(nearest == 0)
       break;
}