再次,我坚持Scala和键/值对的想法。再次,我想以某种方式使用Option。这一次,我被困在如何基于密钥删除一对,并且只有该密钥的第一个实例(并非全部)。我试图使用filter
和filterNot
,但删除所有共享相同的密钥对。此外,再次试图用List
来实现这一点,以使其保持半简单Scala:从列表中删除键/值对
0
A
回答
0
很难说出你在问什么。如果你写出你正在编写的函数的签名,这将有所帮助。
可能是这样的吗?
def remove[A, B](seq: Seq[(A, B)], key: A): Seq[(A, B)] =
seq.indexWhere(_._1 == key) match {
case -1 => seq
case n => seq.patch(n, Nil, 1)
}
remove(Seq((1,2), (2,3), (3,4), (2,5)), 2)
// List((1,2), (3,4), (2,5))
remove(Seq((1,2), (2,3), (3,4), (2,5)), 6)
// List((1,2), (2,3), (3,4), (2,5))
0
Seq has a method called find
,做你问什么:
def find(p: (A) ⇒ Boolean): Option[A] Finds the first element of the sequence satisfying a predicate, if any. Note: may not terminate for infinite-sized collections. p the predicate used to test elements. returns an option value containing the first element in the sequence that satisfies p, or None if none exists.
用法:
val list = List(("A",1),("B",2),("C",3))
def remove(key:String): Option[Int] = list.find(_._1 == key)
remove("B")
// Some((B,2))
remove("D")
// None
0
val list = List(1 -> 'a, 2 -> 'b, 2 -> 'c)
val removal = list find (_._1 == 2)
// Option[(Int, Symbol)] = Some((2,'b))
val newList = list diff removal.toList
// List[(Int, Symbol)] = List((1,'a), (2,'c))
diff
将删除只在参数中找到的每个元素的第一个实例列表中,并不全是filter
。
相关问题
- 1. 从给出要删除的键列表的字典中删除键,值对
- 2. 从scala中删除json对象的键值
- 3. Scala - 从列表中删除重复项
- 4. 从JSON对象中删除键值对
- 5. 从列表中删除值从列表中删除
- 6. 从列表中删除值
- 7. 从列表中删除值
- 8. 从列表中删除值
- 9. 删除重复键值对中的值在列表中
- 10. 从Hive地图中删除键值对?
- 11. 从javax.json.JsonObject中删除键值对
- 12. 从Python字典中删除键/值对
- 13. 如何使用scala从列表中删除重复值?
- 14. Scala从列表中删除单个对象
- 15. 如何使用scala从列表中删除空列表?
- 16. 删除列表中的Foreach循环中的键值对
- 17. 从对象列表中删除对象
- 18. 删除对象从列表
- 19. 从不在python列表中的对象中删除键?
- 20. Rails中删除多个键和值的对从散列
- 21. 从键删除阵列值来结束
- 22. Python - 从列表中删除字典,如果键值等于
- 23. C# - 从KeyValuePair列表中删除键重复和增加价值
- 24. scala:删除列值低于所有列的中值的列
- 25. 删除Cookie键值对
- 26. SCHEME从列表中删除原子值
- 27. 从列表中删除一定的值
- 28. 从Python列表中删除nan值
- 29. 从值列表中删除空
- 30. 从下拉列表中删除值
依赖于执行顺序&“第一”听起来_procedural_而不是_functional_,有点。 –
由于这看起来像家庭作业,并且您希望在使用'List'的同时尽可能地发挥功能,所以我将指向'List'的'span'函数。想想你如何分解它返回的元组(头部,尾部)以及你可以用它们做什么。 – yan
@ThomasW没有。 'List'是一个有序的结构,所以就结构而言,“first”是很好的定义,而不考虑添加/访问项目的执行顺序。 –