[scala] 지도에 키 또는 값이 있는지 확인하는 방법은 무엇입니까?

스칼라 맵이 있고 맵에 특정 값이 있는지 테스트하고 싶습니다.

myMap.exists( /*What should go here*/ )



답변

의미에 따라 여러 가지 옵션이 있습니다.

“값” 키-값 쌍 을 의미하는 경우 다음과 같이 사용할 수 있습니다.

myMap.exists(_ == ("fish",3))
myMap.exists(_ == "fish" -> 3)

키-값 쌍의 값 을 의미하는 경우 다음을 수행 할 수 있습니다.

myMap.values.exists(_ == 3)
myMap.exists(_._2 == 3)

당신은 단지 테스트하고 싶었다면 키 – 값 쌍의 키를 누른 다음,

myMap.keySet.exists(_ == "fish")
myMap.exists(_._1 == "fish")
myMap.contains("fish")

튜플 형식 (예 🙂 _._1 == "fish"이 더 짧아 지 더라도 약간 더 긴 형식은 원하는 작업에 대해 더 명확하게 나타냅니다.


답변

이 맵에 있는지 또는 키에 있는지 알고 싶 습니까? 키를 확인하려면 isDefinedAt다음을 사용하십시오 .

myMap isDefinedAt key


답변

맵 값 중 하나가 통과하는지 테스트합니다.

val mymap = Map(9->"lolo", 7->"lala")
mymap.exists(_._1 == 7) //true
mymap.exists(x => x._1 == 7 && x._2 == "lolo") //false
mymap.exists(x => x._1 == 7 && x._2 == "lala") //true

ScalaDocs는 “이 불변 맵의 일부 요소에 대해 술어가 보유하고 있는지 여부를 테스트합니다.”라는 메소드에 대해 설명합니다. 문제는 두 개의 매개 변수 대신 튜플 (키, 값)을 수신한다는 것입니다.


답변

이것에 대해 :

val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd')
map.values.toSeq.contains('c')  //false

true지도에 c가치가 있으면 수익을 올립니다 .

사용을 고집하는 경우 exists:

map.exists({case(_, value) => value == 'c'})


답변

위의 답변에 따라 exists ()는 contains ()보다 훨씬 느립니다 (5000 개의 문자열 키를 포함하는 Map으로 벤치마킹했으며 비율은 일관된 x100이었습니다). 나는 스칼라에 비교적 익숙하지 않지만 내 추측은 exists ()가 모든 키 (또는 키, 값 튜플)를 반복하는 반면 contains는 Map의 임의 액세스를 사용합니다.


답변