:配列内の特定の項目のインデックスを取得するには?私が配列している場合
let array = [
["Hamburger", "Nachos", "Lasagne"],
["Tomatoes", "Apples", "Oranges"],
["Soda", "Juice", "Water"]
]
を例えば「りんご」の指標は何ですか?プログラム的に取得する方法はありますか?
:配列内の特定の項目のインデックスを取得するには?私が配列している場合
let array = [
["Hamburger", "Nachos", "Lasagne"],
["Tomatoes", "Apples", "Oranges"],
["Soda", "Juice", "Water"]
]
を例えば「りんご」の指標は何ですか?プログラム的に取得する方法はありますか?
let array = [
["Hamburger", "Nachos", "Lasagne"],
["Tomatoes", "Apples", "Oranges"],
["Soda", "Juice", "Water"]
]
for arr in array {
let answer = arr.indexOf("Apples")
if answer {
break
}
print(answer)
}
indexOfはインデックスの名前が –
に変更されました。BtwはBoolではありません。あなたは条件付きでifを使うことはできません。 –
ループを壊した場合、それは決して印刷されません。 –
あなたはindex(of:)
を使用してindex(where:)
を使用して、それのサブインデックスを見つけることができます。
let array = [
["Hamburger", "Nachos", "Lasagne"],
["Tomatoes", "Apples", "Oranges"],
["Soda", "Juice", "Water"]
]
let query = "Apples"
if let index = array.index(where: {$0.contains(query)}),
let subIndex = array[index].index(of: query) {
print(array[index][subIndex]) // Apples
}
を拡張として:
extension Array where Element: Collection, Element.Element: Equatable, Element.Index == Index {
func indexAndSubIndex(of element: Element.Element) -> (index: Index, subIndex: Index)? {
if let index = index(where: {$0.contains(element)}),
let subIndex = self[index].index(of: element) {
return (index,subIndex)
}
return nil
}
}
用法:
let array = [
["Hamburger", "Nachos", "Lasagne"],
["Tomatoes", "Apples", "Oranges"],
["Soda", "Juice", "Water"]
]
let query = "Soda"
if let indexes = array.indexAndSubIndex(of: query) {
print(indexes) // "(index: 2, subIndex: 0)\n"
}
別のオプションとして、拡張。 tupleIndex(of:)
関数は、(Int, Int)?
のタプルを返します。
print(array.tupleIndex(of: "Apples")) //prints Optional((1, 1))
Swift 4では、Element == Iterator.Elementなので、制約を単純化することができます。 –
条件付きキャストの代わりに制約Element.Index == Intを追加する方が良いです。 Int。 - あなたのアプローチ '[" abc "、" def "]。tupleIndex(of:" b ")'はコンパイルされますが、nilを返します。 –
あなたは正しいです。私はその事件を逃した。とにかく条件付きキャストに満足していなかったので、提案に感謝します。私は私の答えを編集します。 – Yannick
、あなたは意味返す関数 `getIndexFor( "オレンジ")を`
func getIndices(arr: [[String]], word: String) -> (Int, Int)? {
for i in 0..<arr.count {
let subArr = arr[i]
if let index = subArr.index(of: word) {
return (i, index)
}
}
return nil
}
let result = getIndices(arr: array, word: "Apples"))
を読み、そのエレガントが、単純ではありません:あなたはこのようにそれを使用することができます
タプル(1,2)? – xtofl
https://stackoverflow.com/q/24028860/6610 – xtofl