老实说,这个问题很简单。有没有一种方法可以快速查找数组中某个元素的所有出现而无需循环遍历它?似乎所有内置方法仅返回第一次出现的索引,而不是全部返回。
拥有index(where:)
返回索引数组的样式方法将是很不错的。有什么想法吗?
预先感谢您的任何投入!
编辑:
感谢大家的回复!看来我应该对此更加清楚。我目前的操作方式是扩展,其外观与下面发布的一个哑光非常相似。我知道,任何执行此操作的方法都必须在内部遍历数组,我更想知道是否有内置方法隐藏在我不知道的语言中。好像有人通常会想做的事情。似乎该扩展程序将继续存在!
您可以创建自己的使用谓词作为参数的索引方法:
Xcode 11•Swift 5.1
extension Collection where Element: Equatable {
func indices(of element: Element) -> [Index] { indices.filter { self[$0] == element } }
}
extension Collection {
func indices(where isIncluded: (Element) throws -> Bool) rethrows -> [Index] { try indices.filter { try isIncluded(self[$0]) } }
}
let arr = [1, 2, 3, 1, 0, 1, 2, 2, 3, 1, 1, 2]
let search = 1
let indices = arr.indices(where: { $0 == search })
// or simply
// let indices = arr.indices { $0 == search }
print(indices) // [0, 3, 5, 9, 10]
let indices2 = arr.indices(of: search)
print(indices2) // [0, 3, 5, 9, 10]
let string = "Hello World !!!"
let indices3 = string.indices(of: "o")
print(indices3) // [Swift.String.Index(_compoundOffset: 16, _cache: Swift.String.Index._Cache.character(1)), Swift.String.Index(_compoundOffset: 28, _cache: Swift.String.Index._Cache.character(1))]
问题内容: 我有一个看起来像这样的表: 还有其他几列与此问题无关。将它们存储为JSON是有原因的。 我要尝试的是查找具有特定 艺术家姓名 (精确匹配)的曲目。 我正在使用此查询: 例如 但是,这会进行全表扫描,而且速度不是很快。我尝试使用function创建一个GIN索引,并使用,但是未使用该索引,查询实际上要慢得多。 问题答案: 在Postgres 9.4+ 使用新的二进制JSON数据类型 ,P
问题内容: 我试图在JavaScript数组中找到元素的所有实例的索引,例如“ Nano”。 我尝试了jQuery.inArray或类似的.indexOf(),但是它只给出了元素的最后一个实例的索引,在这种情况下为5。 如何获得所有实例的信息? 问题答案: 该方法有一个可选的第二个参数,用于指定从其开始搜索的索引,因此您可以在循环中调用它以查找特定值的所有实例: 您并没有真正弄清楚如何使用索引,因
问题内容: 假设我有一个整数的NumPy数组,如下所示: 我想找到数组的开始和结束索引,其中值的值大于重复的x倍(例如5倍)。因此,在上述情况下,其值为22和6。重复的22的开始索引为3,结束的索引为8。重复6相同。Python中是否有特殊的工具对您有所帮助?否则,我将遍历数组索引以获取索引,并将实际值与前一个进行比较。 问候。 问题答案: 使用@WarrenWeckesser在此处给出的和方法来
问题内容: 我有一个看起来像这样的表: 还有其他几列与此问题无关。将它们存储为JSON是有原因的。 我想做的是查找具有特定 艺术家姓名 (精确匹配)的曲目。 我正在使用此查询: 例如 但是,这会进行全表扫描,而且速度不是很快。我尝试使用function创建一个GIN索引,并使用,但是未使用该索引,查询实际上要慢得多。 问题答案: 在Postgres 9.4+ 使用新的二进制JSON数据类型 ,Po
我有一张这样的桌子: 还有其他几个专栏与这个问题无关。将它们存储为JSON是有原因的。 我想做的是查找一首具有特定艺术家名称(精确匹配)的曲目。 我正在使用此查询: 举个例子 但是,这会进行全表扫描,而且速度不是很快。我尝试使用函数创建GIN索引,并使用,但是没有使用索引并且查询实际上显着变慢。
问题内容: 我有一个多维数组,我想获取围绕该数组中特定元素的元素。 例如,如果我有以下内容: 如何找到以上任何一个元素中的所有8个元素?以及如何处理边缘的元素? 我发现的一种方法是为此编写9行代码,这很明显,但是有更好的解决方案吗? 问题答案: for (i = 0; i < array.length; i ) { for (j = 0; j < array[i].length; j ) { fo