Scala创建一个列表,其中包含特定索引处的一些数据,以及所有其余索引处的0

时间:2016-02-16 09:52:13

标签: list scala immutability scala-2.10

我有一个名为category_items_update_path的列表,其中包含值(2,4,6),我想在所有positiveDays索引处创建一个值为{1}的列表DaysDetails在其余指数。

示例 -

positiveDays

O / p列表 - > positiveDays(2,4,6)

任何人都可以建议我在不使用var的情况下做到这一点吗?

4 个答案:

答案 0 :(得分:2)

您可以将“特殊”日期数字放入列表中,然后映射所有工作日,并检查它是否是您的“特殊”日期之一。

val positiveDays = List(2,4,6)

(0 to 6) map { i =>
  if (positiveDays.contains(i)) 1
  else 0
}

res1: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 0, 1, 0, 1, 0, 1)

当然,如果你只对几天感兴趣,那么你可以这样做:

  (0 to 6) map { i =>
    if (i % 2 == 0) 1
    else 0
  }

如果你想在星期一而不是星期天开始你的一周,那么请使用1 to 7代替0 to 6

答案 1 :(得分:1)

这应该有效(仅当positiveDays List不为空时):

val positiveDays = List(2,4,6)
List.tabulate(1 + positiveDays.last) {
  pos => if (positiveDays.contains(pos)) 1 else 0 
}

要正确处理positiveDays为空时的情况,您可以使用:

List.tabulate(positiveDays.lastOption.fold(0)(1 + _)) {
  pos => if (positiveDays.contains(pos)) 1 else 0 
}

答案 2 :(得分:0)

很多方法可以给这只特殊的猫皮肤涂抹,但我觉得这个很简洁明了:

val positiveDays = Set(2,3,6)
for (i<- 0 to 6)
  yield if (positiveDays(i)) 1 else 0

答案 3 :(得分:0)

我认为使用Int来表示一周中的几天是错误的。有Int.MinValue + Int.MaxValue Int个,但一周有7天。

666代表哪一天? -42怎么样?

scala> sealed trait DayOfWeek
defined trait DayOfWeek

scala> case object Monday extends DayOfWeek
defined object Monday

scala> case object Tuesday extends DayOfWeek
defined object Tuesday

// I excluded the rest for conciseness

scala> val positiveDays: List[DayOfWeek] = List(Tuesday)
positiveDays: List[DayOfWeek] = List(Tuesday)

scala> val AllDays: List[DayOfWeek] = List(Monday, Tuesday) 
AllDays: List[DayOfWeek] = List(Monday, Tuesday)

scala> AllDays.map(d => if (positiveDays.contains(d)) (d, 1) else (d,0) )
res0: List[(DayOfWeek, Int)] = List((Monday,0), (Tuesday,1))