2017-06-13 8 views
1

私はちょうどkotlinを学び始めました。そして、私はこの小さな問題を見つけました。私はオブジェクトのリストを持っており、指定された範囲内でリストをフィルタリングしています。範囲内でオブジェクトを取得することができるが、私は外側の境界の範囲を変更したときに、そう簡単な質問を保つために、外側の範囲内のリストフィルター - KOTLIN

を空の配列を取得しています、と言うが

のような整数のリストを持っています
original list [1, 2, 3, 4, 5, 6, 7] 

と要素

作業条件

fun dropper(args: ArrayList<Int>): List<Int> { 
    return args.filter { it in 2..6 } // it >= 2 && it <= 6 
} 
をフィルタリングスポイト機能を備えています

出力は

[2, 3, 4, 5, 6] 

として受信されるが、私は空のリストとして出力を得る

fun dropper(args: ArrayList<Int>): List<Int> { 
    return args.filter { it in 4..2 } // it <= 2 && it >= 4 
    // it in 4..2 , was suggested by the IDE 
} 

に範囲を変更するとき。

この関数が呼び出された後、意図した結果を与える他の操作にリストを渡すので、リストの値がクリアされていないことを確認してください。

答えて

1

、私はまた、!操作は同様

fun dropper(args: ArrayList<Int>): List<Int> { 
    return args.filter { it !in 2..4 } // it <= 2 && it >= 4 
} 
+0

これは '4..2'の範囲に値がないので元のリストを返します。条件は常に真です。 (言い換えれば、 'it!は4..2'には何もないので、' it'値は 'true'です)。また、ここで使用しているオペレータは、実際は['!in'](https://kotlinlang.org/docs/reference/operator-overloading.html#in)です。 – zsmb13

3

4..2は、it >= 4 && it <= 2に変換されるため、基本的に空の範囲です。デクリメントだ範囲を作成するには、downToを使用する必要があります。

args.filter { it in (2..4).reversed() } 

この特定の問題にもダンルーの最近のblog postの最初の例である:

args.filter { it in 4 downTo 2 } 

reversedはまた、いくつかのケースで代替することができます範囲をうまくカバーしています。

+0

ゴールド働くことが判明します!ありがとう。 – Sanoop

1

downToを使用してください。詳細な説明はRangesをお読みください。

範囲(x..y)、ここでxは開始インデックスであり、yは最後であり、それは基本的な方法になります。したがって1..10の範囲には10個の要素がありますが、10..1は10個のオンワードから見えるため、空の範囲です。 downTo演算子を使用する必要があります。

次のようにコードを変更し

fun dropper(args: ArrayList<Int>): List<Int> { 
    return args.filter { it in 4 downTo 2 } // it <= 2 && it >= 4 
} 
1

こんにちはあなたはここでdownTo

fun main(args: Array<String>) { 
    var list = arrayListOf<Int>(1, 2, 3, 4, 5, 6, 7) 
    println(dropper(list)) // [2, 3, 4] 
} 

fun dropper(args: ArrayList<Int>): List<Int> { 
    return args.filter { it in 4 downTo 2 } // [2, 3, 4] 
} 

演算子を使用する必要があり、完全な範囲を使用する方法を説明しています。 - これらの答え以外https://kotlinlang.org/docs/reference/ranges.html#ranges

+0

kotlinDocsを深く掘り下げる必要があると思う、ありがとう、BTW :) – Sanoop