web-dev-qa-db-fra.com

Comment mettre le premier et le dernier élément de Array dans Swift

J'ai un dictionnaire comme ça

["Price": ["$00.00 - $200.00", "$200.00 - $400.00", "$600.00 - $800.00"]]

Maintenant, je stocke toute la valeur du dictionnaire dans un tableau comme celui-ci

var priceRange: [String] = [String]()
if let obj = currentFilters["Price"] as? [String] {
        self.priceRange = obj
        printD(self.priceRange)
    }

Et en utilisant les méthodes Array.first et Array.last, je vais obtenir les valeurs du premier et du dernier élément de mon tableau.

let first = priceRange.first ?? "" // will get("[$00.00 - $200.00]")
let last = priceRange.last ?? ""   // will get("[$600.00 - $800.00]")

Mais ce que je veux en réalité, c’est que je veux le 00,00 $ de premier et 800 $ de dernier pour faire la combinaison souhaitée de [00,00 $ - 800,00 $]

Comment puis-je faire ceci. S'il vous plaît aider? 

7
wings

Vous devez prendre la valeur first ("$00.00 - $200.00"), puis la valeur last ("$600.00 - $800.00"), puis divisez-les par le symbole "-" et prenez respectivement la première et la dernière valeur et combinez-la en une seule chaîne.

let currentFilters = ["Price": ["$00.00 - $200.00", "$200.00 - $400.00", "$600.00 - $800.00"]]

var priceRange: [String] = [String]()
if let obj = currentFilters["Price"] as? [String] {
    priceRange = obj
    print(priceRange)
}

let first = priceRange.first!.split(separator: "-").first!
let last = priceRange.last!.split(separator: "-").last!

let range = "\(first) - \(last)"

Pour une meilleure gestion des options, vous pouvez utiliser ceci (NB, je suis mon style de codage trop descriptif. Ce code peut être beaucoup plus compact)

func totalRange(filters: [String]?) -> String? {
    guard let filters = filters else { return nil }
    guard filters.isEmpty == false else { return nil }
    guard let startComponents = priceRange.first?.split(separator: "-"), startComponents.count == 2 else {
        fatalError("Unexpected Filter format for first filter") // or `return nil`
    }
    guard let endComponents = priceRange.last?.split(separator: "-"), endComponents.count == 2 else {
        fatalError("Unexpected Filter format for last filter") // or `return nil`
    }
    return "\(startComponents.first!) - \(endComponents.last!)"
}
let range = totalRange(filters: currentFilters["Price"])

let range1 = totalRange(filters: currentFilters["Not Exists"])

Passez le code ci-dessus à la cour de récréation. Cela peut être écrit de façon beaucoup plus courte, mais je l'ai gardé comme ça pour des raisons de description

4
fewlinesofcode

Vous pouvez faire ce qui suit:

  let r = ["$00.00 - $200.00", "$200.00 - $400.00", "$600.00 - $800.00"]
          .reduce("", +) //Combine all strings
          .components(separatedBy: " - ") //Split the result
          .map({ String($0) }) //Convert from SubString to String
    print(r.first) //prints $00.00
    print(r.last) // prints $800.00

let newRange = [r.first!, r.last!].joined(separator: " - ")
2
CZ54
func priceRange(with priceRanges: [String]) -> String? {
    guard
        let min = priceRanges.first?.components(separatedBy: " - ").first,
        let max = priceRanges.last?.components(separatedBy: " - ").last else { return nil }

    return "[\(min) - \(max)]"
}

print(priceRange(
    with: [
        "$00.00 - $200.00",
        "$200.00 - $400.00",
        "$600.00 - $800.00"
    ]
))
2
Callam

Vous pouvez utiliser split pour fractionner la plage en fonction du caractère - plutôt que pour supprimer les espaces.

let first = priceRange.first?.split(separator: "-").first?.trimmingCharacters(in: .whitespaces) ?? ""
let last = priceRange.last?.split(separator: "-").last?.trimmingCharacters(in: .whitespaces) ?? ""
1
Dávid Pásztor

Utilisez ceci Vous pouvez trouver vos valeurs: 

if let obj = priceRange as? [String] {
    let max = priceRange.max()
    let min = priceRange.min()
    print(max?.components(separatedBy: " - ").map({$0.trimmingCharacters(in: .whitespacesAndNewlines)}).max())  //800
    print(min?.components(separatedBy: " - ").map({$0.trimmingCharacters(in: .whitespacesAndNewlines)}).min())   //00
}
1
Pushp
let amountsArray = ["$00.00 - $200.00", "$200.00 - $400.00", "$600.00 - $800.00"]
let amounts = amountsArray.reduce("") { $0 + $1 }.split(separator: "-")
if let first = amounts.first, let last = amounts.last {
    print("[\(first)-\(last)]")
}
1
Sateesh

// utilise des composants (séparésPar :):

laisser les prix = f.composants (séparésPar: "-")

price.first // 600,00 $

price.last // 800.00 $

0
Djamal

Vous pouvez également utiliser String.components (SeparBy :):

var text = "100$ - 200$"
var new = text.components(separatedBy: " - ")[0]
print(new) // Prints 100$
0
user2531284