在JAVA中如何判断一个元素是否在数组中_如何检查元素是否在数组中

(斯威夫特3)

检查数组中是否存在元素(满足某些条件),如果是,则继续使用第一个这样的元素

意图是:

检查数组中是否存在元素(/满足一些布尔条件,不一定是等式测试),

如果是这样,继续使用第一个这样的元素,

然后另一个contains(_:)作为blueprinted Sequence 是first(where:)的 Sequence :

let elements = [1, 2, 3, 4, 5]

if let firstSuchElement = elements.first(where: { $0 == 4 }) {

print(firstSuchElement) // 4

// ...

}

在这个人为的例子中,它的用法看似愚蠢,但是如果查询非基本元素类型的数组是否存在满足某些条件的任何元素,则它非常有用 . 例如 .

struct Person {

let age: Int

let name: String

init(_ age: Int, _ name: String) {

self.age = age

self.name = name

}

}

let persons = [Person(17, "Fred"), Person(16, "Susan"),

Person(19, "Hannah"), Person(18, "Sarah"),

Person(23, "Sam"), Person(18, "Jane")]

if let eligableDriver = persons.first(where: { $0.age >= 18 }) {

print("\(eligableDriver.name) can possibly drive the rental car in Sweden.")

// ...

} // Hannah can possibly drive the rental car in Sweden.

let daniel = Person(18, "Daniel")

if let sameAgeAsDaniel = persons.first(where: { $0.age == daniel.age }) {

print("\(sameAgeAsDaniel.name) is the same age as \(daniel.name).")

// ...

} // Sarah is the same age as Daniel.

使用 .filter { ... some condition }.first 的任何链式操作都可以有利地替换为 first(where:) . 后者更好地显示了意图,并且具有优于 .filter 的可能的非延迟设备的性能优势,因为它们将在提取通过过滤器的(可能的)第一元素之前传递完整数组 .

检查数组中是否存在元素(满足某些条件),如果存在,则删除第一个此类元素

以下评论查询:

如何从阵列中删除firstSuchElement?

与上述类似的用例是删除满足给定谓词的第一个元素 . 为此,Collection的index(where:)方法(可供阵列集合使用)可用于查找满足谓词的第一个元素的索引,之后索引可与remove(at:)方法一起使用of Array to(可能;鉴于它存在)删除该元素 .

var elements = ["a", "b", "c", "d", "e", "a", "b", "c"]

if let indexOfFirstSuchElement = elements.index(where: { $0 == "c" }) {

elements.remove(at: indexOfFirstSuchElement)

print(elements) // ["a", "b", "d", "e", "a", "b", "c"]

}

或者,如果您要从数组中删除元素并使用,请将 Optional :s map(_:)方法有条件地应用(对于 .some(...) 从 index(where:) 返回),使用 index(where:) 的结果从数组中删除并捕获已删除的元素(在可选的绑定子句) .

var elements = ["a", "b", "c", "d", "e", "a", "b", "c"]

if let firstSuchElement = elements.index(where: { $0 == "c" })

.map({ elements.remove(at: $0) }) {

// if we enter here, the first such element have now been

// remove from the array

print(elements) // ["a", "b", "d", "e", "a", "b", "c"]

// and we may work with it

print(firstSuchElement) // c

}

请注意,在上面的设计示例中,数组成员是简单的值类型( String 实例),因此使用谓词来查找给定成员有点过度,因为我们可能只是使用更简单的 index(of:) 方法测试相等性,如@DogCoffee's answer所示 . 但是,如果将上述查找和删除方法应用于 Person 示例,则使用带有谓词的 index(where:) 是合适的(因为我们不再测试相等性,而是为了实现提供的谓词) .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值