List Scala创建一个列表,在特定索引处包含一些数据,在所有剩余索引处包含0

List Scala创建一个列表,在特定索引处包含一些数据,在所有剩余索引处包含0,list,scala,immutability,scala-2.10,List,Scala,Immutability,Scala 2.10,我有一个名为positiveDays的列表,其中包含值(2,4,6),我想创建一个列表DaysDetails,所有positiveDays索引的值为1,其余索引的值为0 示例- positiveDays(2,4,6) O/p列表->DaysDetails(0,0,1,0,1,0,1) 有谁能给我一个不使用var的方法吗?你可以把你的“特殊”天数放在列表中,然后用检查它是否是你的“特殊”天数来映射整个星期的天数 当然,如果你只对偶数天感兴趣,那么你可以这样做: (0 to 6) map {

我有一个名为
positiveDays
的列表,其中包含值(2,4,6),我想创建一个列表
DaysDetails
,所有
positiveDays
索引的值为1,其余索引的值为0

示例-

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

有谁能给我一个不使用var的方法吗?

你可以把你的“特殊”天数放在列表中,然后用检查它是否是你的“特殊”天数来映射整个星期的天数

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

  (0 to 6) map { i =>
    if (i % 2 == 0) 1
    else 0
  }
如果你想从周一开始一周,而不是周日,那么就用
1到7
而不是
0到6

您可以将您的“特殊”日编号放入列表中,然后通过检查它是否是您的“特殊”日来映射所有周日

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

  (0 to 6) map { i =>
    if (i % 2 == 0) 1
    else 0
  }
如果你想从周一开始一周,而不是周日,那么就用
1到7
而不是
0到6

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

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

List.tabulate(positiveDays.lastOption.fold(0)(1 + _)) {
  pos => if (positiveDays.contains(pos)) 1 else 0 
}
这应该有效(仅当
positiveDays
列表不为空时):

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

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

给这只猫剥皮有很多方法,但我认为这一种方法简洁明了:

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

对于(我有很多方法可以给这只猫剥皮,但我认为这一种方法简洁明了:

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

对于(i我认为用
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))

我认为用
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))

需要将positiveDays.last更改为positiveDays.last+1感谢注意,如果列表为空,
last
方法将引发异常-
scala>list().last java.util.NoSuchElementException
谢谢!我添加了一个替代版本来处理空列表的大小写。如果
positiveDays
中有
-42
,该怎么办?这意味着什么?它是否设置了结果列表的新下限(
-42
而不是
0
)?请注意,如果未对
positiveDays
进行排序,则当前解决方案不起作用。需要将positiveDays.last更改为positiveDays.last+1感谢注意,如果列表为空,则
last
方法将引发异常-
scala>list().last java.util.NoSuchElementException
谢谢!我添加了一个替代版本来处理空列表的大小写。如果
positiveDays
中有
-42
,该怎么办?这意味着什么?它是否设置了结果列表的新下限(
-42
而不是
0
)?请注意,如果未对
positiveDays
进行排序,则当前解决方案不起作用。请参阅