Scala поставляется с красивым corresponds
способом:Scala - найти первое положение, в котором два Seq отличаются
val a = scala.io.Source.fromFile("fileA").getLines().toSeq()
val b = scala.io.Source.fromFile("fileB").getLines().toSeq()
val areEqual = a.corresponds(b){_.equals(_)}
if(areEqual) ...
И я совсем как краткость этого.
Существует ли уже подобный метод, который также сообщит мне о первой позиции, в которой эти две последовательности отличаются?
I.e. есть более идиоматический способ, чтобы написать что-то вроде этого:
val result = ((seqA zip seqB).zipWithIndex).find{case ((a,b),i) => !a.equals(b)} match{
case Some(((a,b),i)) => s"seqA and seqB differ in pos $i: $a <> $b"
case _ => "no difference"
}
Потому что, как вы можете видеть, что это кровавое боль в шее, чтобы читать. И это становится еще хуже, если я хочу использовать триплеты вместо кортежей кортежей:
val result = (((seqA zip seqB).zipWithIndex) map {case (t,i) => (t._1,t._2,i)}).find{case (a,b,i) => !a.equals(b)} match{
case Some((a,b,i)) => s"seqA and seqB differ in pos $i: $a <> $b"
case _ => "no difference"
}
Я знаю о методе diff
. К сожалению, это не учитывает порядок элементов.
FYI: Вы должны написать 'a.equals (б)' как 'а = b' – dhg
Помимо:! Я не думаю, что вам нужно' случай _ => false', потому что 'zip' усечет чем длиннее два входа (если они отличаются по длине), значит, ваш первый случай всегда будет соответствовать? – DNA