스칼라 맵이 있고 맵에 특정 값이 있는지 테스트하고 싶습니다.
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의 임의 액세스를 사용합니다.