web-dev-qa-db-ja.com

Swift配列を文字列に変換する方法

プログラム的にそれを行う方法は知っていますが、組み込みの方法があると確信しています...

私が使ったすべての言語には、オブジェクトのコレクションのためのある種のデフォルトのテキスト表現があります。これは、配列を文字列と連結したりprint()関数に渡したりするときに吐き出されます。配列を文字列に簡単に変換する組み込みの方法がありますか。それとも、配列を文字列化するときは常に明示的にする必要がありますか。

312
Troy

配列に文字列が含まれている場合は、Stringjoinメソッドを使用できます。

var array = ["1", "2", "3"]

let stringRepresentation = "-".join(array) // "1-2-3"

In Swift 2

var array = ["1", "2", "3"]

let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"

これは、特定の区切り文字(ハイフン、空白、カンマなど)を使用したい場合に便利です。

そうでなければ、配列の文字列表現を返すdescriptionプロパティを使うことができます。

let stringRepresentation = [1, 2, 3].description // "[1, 2, 3]"

ヒント:Printableプロトコルを実装しているオブジェクトはすべてdescriptionプロパティを持っています。あなたがあなた自身のクラス/構造体でそのプロトコルを採用するならば、あなたはそれらも同様に印刷しやすくします

In - スイフト3

  • joinjoinedになります、例[nil, "1", "2"].flatMap({$0}).joined()
  • joinWithSeparatorjoined(separator:)になります(文字列の配列でのみ利用可能)

In - スイフト4

var array = ["1", "2", "3"]
array.joined(separator:"-")
608
Antonio

Swift 5では、あなたのニーズに応じて、あなたはあなたの問題を解決するために次の遊び場サンプルコードの一つを選ぶことができます。


Charactersの配列を区切り文字なしのStringに変換する:

let characterArray: [Character] = ["J", "o", "h", "n"]
let string = String(characterArray)

print(string)
// prints "John"

Stringsの配列を区切り文字なしのStringに変換する:

let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: "")

print(string) // prints: "BobDanBryan"

単語間の区切り文字を使ってStringsの配列をStringに変換する:

let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: " ")

print(string) // prints: "Bob Dan Bryan"

Stringsの配列を、文字と文字の間に区切り記号を付けてStringに変換します。

let stringArray = ["car", "bike", "boat"]
let characterArray = stringArray.flatMap { $0 }
let stringArray2 = characterArray.map { String($0) }
let string = stringArray2.joined(separator: ", ")

print(string) // prints: "c, a, r, b, i, k, e, b, o, a, t"

Floatsの配列を、数値の間に区切り記号を付けてStringに変換する:

let floatArray = [12, 14.6, 35]
let stringArray = floatArray.map { String($0) }
let string = stringArray.joined(separator: "-")

print(string)
// prints "12.0-14.6-35.0"
106
Imanou Petit

Swift 2.0 Xcode 7.0 Beta 6以降では、joinWithSeparator()の代わりにjoin()を使用します。

var array = ["1", "2", "3"]
let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"

joinWithSeparatorSequenceTypeの拡張として定義されています

extension SequenceType where Generator.Element == String {
    /// Interpose the `separator` between elements of `self`, then concatenate
    /// the result.  For example:
    ///
    ///     ["foo", "bar", "baz"].joinWithSeparator("-|-") // "foo-|-bar-|-baz"
    @warn_unused_result
    public func joinWithSeparator(separator: String) -> String
}
49
Siva

スイフト3

["I Love","Swift"].joined(separator:" ") // previously joinWithSeparator(" ")
23
hardikdevios

スウィフト4では

let array:[String] = ["Apple", "Pear ","Orange"]

array.joined(separator: " ")
14
Ankit garg

オプション/非オプション文字列の配列を変更するには

//Array of optional Strings
let array : [String?] = ["1",nil,"2","3","4"]

//Separator String
let separator = ","

//flatMap skips the nil values and then joined combines the non nil elements with the separator
let joinedString = array.flatMap{ $0 }.joined(separator: separator)


//Use Compact map in case of **Swift 4**
    let joinedString = array.compactMap{ $0 }.joined(separator: separator

print(joinedString)

ここで flatMap compactMap は、配列内のnil値をスキップし、他の値を追加して結合文字列を生成します。

7
Agent Smith

誰もreduceについて言及していないので、ここにあります:

[0,1,1,0].map{"\($0)"}.reduce(""){$0+$1}//"0110"

関数型プログラミングの精神の中で?

6
eonist

MineはcomponentsJoinedByStringを使ってNSMutableArrayに取り組んでいます

var array = ["1", "2", "3"]
let stringRepresentation = array.componentsJoinedByString("-") // "1-2-3"
4
Onur Var

Swift 2.2では、componentsJoinedByString( "、")を使うために配列をNSArrayにキャストする必要があるかもしれません。

let stringWithCommas = (yourArray as NSArray).componentsJoinedByString(",")
3

空の文字列を配列に入れたい場合。

["Jet", "Fire"].filter { !$0.isEmpty }.joined(separator: "-")

Nil値もフィルタリングしたい場合は、

["Jet", nil, "", "Fire"].flatMap { $0 }.filter { !$0.isEmpty }.joined(separator: "-")
2
Sourav Chandra
let arrayTemp :[String] = ["Mani","Singh","iOS Developer"]
    let stringAfterCombining = arrayTemp.componentsJoinedByString(" ")
   print("Result will be >>>  \(stringAfterCombining)")

結果は>>>になりますMani Singh iOS Developer

2

あなたが説明しているものと同等のSwiftは文字列補間です。 JavaScriptが"x" + arrayを実行するようなことを考えているなら、Swiftの同等物は"x\(array)"です。

一般的な注意として、文字列補間とPrintableプロトコルの間には重要な違いがあります。特定のクラスだけがPrintableに準拠しています。 すべての クラスは、どういうわけか文字列補間できます。一般的な関数を書くときに役立ちます。あなたは自分自身をPrintableクラスに限定する必要はありません。

1
Rob Napier

Arrayの拡張子を作成します。

extension Array {

    var string: String? {

        do {

            let data = try JSONSerialization.data(withJSONObject: self, options: [.prettyPrinted])

            return String(data: data, encoding: .utf8)

        } catch {

            return nil
        }
    }
}

これを試して:

let categories = dictData?.value(forKeyPath: "listing_subcategories_id") as! NSMutableArray
                        let tempArray = NSMutableArray()
                        for dc in categories
                        {
                            let dictD = dc as? NSMutableDictionary
                            tempArray.add(dictD?.object(forKey: "subcategories_name") as! String)
                        }
                        let joinedString = tempArray.componentsJoined(by: ",")
0
Tej Patel

任意の要素タイプ

extension Array {

    func joined(glue:()->Element)->[Element]{
        var result:[Element] = [];
        result.reserveCapacity(count * 2);
        let last = count - 1;
        for (ix,item) in enumerated() {
            result.append(item);
            guard ix < last else{ continue }
            result.append(glue());
        }
        return result;
    }
}
0
john07

文字列配列リストがある場合は、Intに変換

let arrayList = list.map { Int($0)!} 
     arrayList.description

それはあなたに文字列値を与えるでしょう

印刷機能を使用して任意のオブジェクトを印刷することができます

または\(name)を使用して任意のオブジェクトを文字列に変換します。

例:

let array = [1,2,3,4]

print(array) // prints "[1,2,3,4]"

let string = "\(array)" // string == "[1,2,3,4]"
print(string) // prints "[1,2,3,4]"
0
123FLO321

ヘブライ語や日本語のような一部の言語では、区切り記号はよくない考えです。これを試して:

// Array of Strings
let array: [String] = ["red", "green", "blue"]
let arrayAsString: String = array.description
let stringAsData = arrayAsString.data(using: String.Encoding.utf16)
let arrayBack: [String] = try! JSONDecoder().decode([String].self, from: stringAsData!)

それぞれ他のデータ型の場合:

// Set of Doubles
let set: Set<Double> = [1, 2.0, 3]
let setAsString: String = set.description
let setStringAsData = setAsString.data(using: String.Encoding.utf16)
let setBack: Set<Double> = try! JSONDecoder().decode(Set<Double>.self, from: setStringAsData!)
0
Alexey Chekanov