根据 Int 数组过滤数组
Posted
技术标签:
【中文标题】根据 Int 数组过滤数组【英文标题】:Filtering an array based on an array of Int 【发布时间】:2022-01-01 11:10:48 【问题描述】:我有一个Drink
对象,它有一个名为strength
的属性。强度是一个整数,值为 0,1,2 或 3。
现在在我的项目中,我在列表视图中显示所有 Drink
对象。在列表视图的顶部,有一个过滤部分供用户根据强度过滤Drink
对象。这些是复选框,这意味着用户可以选择最少 1 个或最多 4 个过滤器。这将作为 Int 数组保存到 SharedPreferences。
data class Drink(val theDrinkName:String, val strength:Int)
object DrinkData
const val low = 0
const val medium = 1
const val strong = 2
const val intense = 3
fun generateAllDrinks():Array<Drink>
return arrayOf(
Drink("Vodka", medium),
Drink("Shirley Temple", low),
Drink("rum", strong),
Drink("Gin", medium),
Drink("151", intense),
Drink("99", strong)
)
这是我生成所有数据的方式:
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
compareBy<Drink> it.theDrinkName.first().isDigit()
.thenBy it.theDrinkName.toLowerCase()
)
我需要能够根据 Int 数组过滤此数据的强度属性。(Int 数组是保存到 SharedPreferences 的内容。)
val filteredStrengthArray = arrayListOf<Int>(2,3)
这会将allDrinks
过滤为朗姆酒、151、99。
我的进步:
这是我实现此过滤的壁橱。
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
compareBy<Drink> it.theDrinkName.first().isDigit()
.thenBy it.theDrinkName.toLowerCase()
).filter it.strength == 2 || it.strength == 3
问题是我需要通过 Int 数组进行过滤以对齐 SharedPreferences 中保存的内容。
如何通过提供 Int 数组来过滤此数据的强度属性?
【问题讨论】:
【参考方案1】:想到的第一个解决方案是检查strength
属性是否包含在filteredStrengthArray
中:
val filteredStrengthArray = arrayListOf<Int>(2,3)
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
...
).filter filteredStrengthArray.isEmpty() || filteredStrengthArray.contains(it.strength)
【讨论】:
以上是关于根据 Int 数组过滤数组的主要内容,如果未能解决你的问题,请参考以下文章