4

Scalaで次のコードを実装する慣用的な方法は何ですか?

for (int i = 1; i < 10; i+=2) {
  // i = 1, 3, 5, 7, 9
  bool intercept = false;

  for (int j = 1; j < 10; j+=3) {
    // j = 1, 4, 7
    if (i==j) intercept = true
  }

  if (!intercept) {
    System.out.println("no intercept")
  }
}
4

2 に答える 2

6

Rangeと友達を使用できます:

if (((1 until 10 by 2) intersect (1 until 10 by 3)).isEmpty)
  System.out.println("no intercept")

これには、ネストされたループ (タイトルで言及されています) は含まれませんが、Scala で同じ結果を得るには、はるかに慣用的な方法です。

編集: Rex Kerr が指摘するように、上記のバージョンは毎回メッセージを出力しませんが、以下は出力します:

(1 until 10 by 2) filterNot (1 until 10 by 3 contains _) foreach (
   _ => println("no intercept")
)
于 2012-10-31T16:58:16.443 に答える
6

編集:おっと、あなたはそれぞれのために印刷しますi。その場合:

for (i <- 1 until 10 by 2) {
  if (!(1 until 10 by 3).exists(_ == i)) println("no intercept")
}

ただし、この場合、実際には条件は必要ありません。containsメソッドは、内側のループでチェックしたいものをチェックします。

for (i <- 1 until 10 by 2) {
  if (!(1 until 10 by 3).contains(i)) println("no intercept")
}
于 2012-10-31T17:01:10.830 に答える