プログラムでそれを行う方法は知っていますが、組み込みの方法があると確信しています...
私が使用したすべての言語には、配列を文字列と連結したり、print()関数などに渡したりすると吐き出される、オブジェクトのコレクションに対するある種のデフォルトのテキスト表現があります。AppleのSwift言語は簡単に配列を文字列に変換する組み込みの方法がありますか、それとも配列を文字列化するときに常に明示的にする必要がありますか?
プログラムでそれを行う方法は知っていますが、組み込みの方法があると確信しています...
私が使用したすべての言語には、配列を文字列と連結したり、print()関数などに渡したりすると吐き出される、オブジェクトのコレクションに対するある種のデフォルトのテキスト表現があります。AppleのSwift言語は簡単に配列を文字列に変換する組み込みの方法がありますか、それとも配列を文字列化するときに常に明示的にする必要がありますか?
回答:
配列に文字列が含まれている場合は、String
' join
メソッドを使用できます。
var array = ["1", "2", "3"]
let stringRepresentation = "-".join(array) // "1-2-3"
でスウィフト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
プロパティがあります。独自のクラス/構造体でそのプロトコルを採用すると、それらも印刷しやすくなります
ではスウィフト3
join
になるjoined
、例[nil, "1", "2"].flatMap({$0}).joined()
joinWithSeparator
になるjoined(separator:)
(文字列の配列でのみ使用可能)ではスウィフト4
var array = ["1", "2", "3"]
array.joined(separator:"-")
"-".join(array)
Swift 2、Xcode 7 Beta 6では使用できなくなりました。使用してみてくださいarray.joinWithSeparator("-")
joinWithSeparator
文字列の配列でのみ使用できます。他のオブジェクトの配列がある場合は、map
最初に使用します。例:[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
Swift 5では、必要に応じて、問題を解決するために次のPlaygroundサンプルコードのいずれかを選択できます。
Character
sの配列をString
セパレータなしのに変換します。let characterArray: [Character] = ["J", "o", "h", "n"]
let string = String(characterArray)
print(string)
// prints "John"
String
sの配列をString
セパレータなしのに変換します。let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: "")
print(string) // prints: "BobDanBryan"
String
sの配列をString
単語間の区切り文字を含むaに変換します。let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: " ")
print(string) // prints: "Bob Dan Bryan"
String
sの配列String
を、文字間に区切り文字を含むaに変換します。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"
Float
sの配列をString
、数値の間にセパレーターがあるaに変換します。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"
try JSONDecoder().decode([Int].self, from: Data(string.utf8))
Swift 2.0 Xcode 7.0ベータ6以降では、次のjoinWithSeparator()
代わりに使用しますjoin()
。
var array = ["1", "2", "3"]
let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"
joinWithSeparator
の拡張として定義されています SequenceType
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
}
スウィフト3
["I Love","Swift"].joined(separator:" ") // previously joinWithSeparator(" ")
オプション/非オプション文字列の配列を変更するには
//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値をスキップし、他の値を追加して結合された文字列を提供します。
Swift 2.2では、componentsJoinedByString( "、")を使用するために、配列をNSArrayにキャストする必要がある場合があります。
let stringWithCommas = (yourArray as NSArray).componentsJoinedByString(",")
配列内の空の文字列を捨てたい場合。
["Jet", "Fire"].filter { !$0.isEmpty }.joined(separator: "-")
nil値もフィルタリングする場合:
["Jet", nil, "", "Fire"].flatMap { $0 }.filter { !$0.isEmpty }.joined(separator: "-")
let arrayTemp :[String] = ["Mani","Singh","iOS Developer"]
let stringAfterCombining = arrayTemp.componentsJoinedByString(" ")
print("Result will be >>> \(stringAfterCombining)")
結果は>>> Mani Singh iOS Developerになります
の拡張を作成します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
}
}
}
区切り文字は、ヘブライ語や日本語などの一部の言語にとっては悪い考えです。これを試して:
// 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!)
文字列配列リストがある場合は、Intに変換します
let arrayList = list.map { Int($0)!}
arrayList.description
それはあなたに文字列値を与えます
これを試して:
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: ",")
SWIFT 3の場合:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField == phoneField
{
let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
let components = newString.components(separatedBy: NSCharacterSet.decimalDigits.inverted)
let decimalString = NSString(string: components.joined(separator: ""))
let length = decimalString.length
let hasLeadingOne = length > 0 && decimalString.character(at: 0) == (1 as unichar)
if length == 0 || (length > 10 && !hasLeadingOne) || length > 11
{
let newLength = NSString(string: textField.text!).length + (string as NSString).length - range.length as Int
return (newLength > 10) ? false : true
}
var index = 0 as Int
let formattedString = NSMutableString()
if hasLeadingOne
{
formattedString.append("1 ")
index += 1
}
if (length - index) > 3
{
let areaCode = decimalString.substring(with: NSMakeRange(index, 3))
formattedString.appendFormat("(%@)", areaCode)
index += 3
}
if length - index > 3
{
let prefix = decimalString.substring(with: NSMakeRange(index, 3))
formattedString.appendFormat("%@-", prefix)
index += 3
}
let remainder = decimalString.substring(from: index)
formattedString.append(remainder)
textField.text = formattedString as String
return false
}
else
{
return true
}
}
array.description
または、カスタムのセパレータが必要な場合array.joined(separator: ",")