【发布时间】:2017-04-19 07:01:42
【问题描述】:
对于实际练习,我需要定义一个函数,该函数基本上会更改列表中奇数索引中每个值的索引,以便我得到这个:
changePairs(List(1,2,3,4,5,6,7,8,9,10,11))
//> res62: List[Int] = List(2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 11)
changePairs(List(2,2,30,4,50,6,7,80,9,100))
//> res63: List[Int] = List(2, 2, 4, 30, 6, 50, 80, 7, 100, 9)
所以基本上我需要交换每个奇偶对的位置,如果我在最后一个索引处留下一个奇数元素(第一个示例中为 11),我会保持原样。
我有这个,但它肯定不起作用,我不确定为什么。
def changePairs(a: List[Int]) = a.zipWithIndex.map {
case (s,i) => if (i % 2 != 0) a.patch(i,Seq(s),1); a.patch(i-2,Seq(s),0);
}
【问题讨论】:
-
不清楚您要做什么。如果您只想更改奇数值的索引,为什么要在第二个示例中移动
4和6? -
我不明白你的逻辑。您的第二个示例只有两个奇数值(7 和 9),但更改的值远不止这两个值。
-
a.grouped(2).map(_.reverse).flatten.toList这个问题前几天才问过,但是找不到骗子。 -
@CyrilleCorpet 刚刚注意到我写错了,不是每个奇数值,而是奇数索引中的每个值。
-
@JörgWMittag 就像我对 CyrilleCorpet 说的一样,我解释得很糟糕,不是奇数,而是奇数索引处的值。