আমি কীভাবে একটি স্ট্রিটে একটি সুইফ্ট অ্যারে রূপান্তর করব?


353

প্রোগ্রামিয়ালি এটি কীভাবে করা যায় আমি জানি তবে আমি নিশ্চিত যে একটি অন্তর্নির্মিত উপায় আছে ...

আমি যে ভাষা ব্যবহার করেছি তার প্রত্যেকটি উপাদানের সংগ্রহের জন্য কিছু প্রকারের ডিফল্ট পাঠ্য উপস্থাপনা থাকে যা আপনি যখন স্ট্রিং দিয়ে অ্যারে সংমিশ্রণ করার চেষ্টা করেন, বা এটি একটি মুদ্রণ () ফাংশন ইত্যাদিতে পাস করার চেষ্টা করেন তখন তা ছড়িয়ে যায় Apple কোনও অ্যারেকে সহজেই একটি স্ট্রিংয়ে রূপান্তর করার একটি অন্তর্নির্মিত উপায় আছে, বা অ্যারের স্ট্রিংফাই করার সময় আমাদের কী সর্বদা স্পষ্ট হওয়া উচিত?


3
সুইফট 4: array.description অথবা আপনি যদি কাস্টম বিভাজক চানarray.joined(separator: ",")
জোনাথন সলোরজানো

উত্তর:


697

যদি অ্যারেটিতে স্ট্রিং থাকে তবে আপনি 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:"-")

2
@ আন্ড্রেজ: এটি 1.2 এবং 2.0 তে উভয় ক্ষেত্রেই কাজ করে। আপনি কি স্ট্রিংগুলির একটি অ্যারে ব্যবহার করছেন?
আন্তোনিও

1
আন্তোনিও, দুঃখিত, আমার খারাপ। আমার অ্যারে নিয়ে আমার সমস্যা ছিল। এখন আমি আপনার সমাধানের কাজগুলি নিশ্চিত করতে পারি। :)
আন্দ্রেজ

12
"-".join(array)সুইফট 2, এক্সকোড 7 বিটা 6 তে আর উপলভ্য নয়, ব্যবহারের চেষ্টা করুনarray.joinWithSeparator("-")
হ্যারি এনজি

87
joinWithSeparatorশুধুমাত্র স্ট্রিং অ্যারের জন্য উপলব্ধ। আপনার যদি অন্য অবজেক্টের অ্যারে থাকে তবে mapপ্রথমে ব্যবহার করুন । উদাহরণস্বরূপ,[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
দিমিত্রি

3
@ দিমিত্রি স্ট্রিংয়ে রূপান্তর করার জন্য স্ট্রিং ইন্টারপোলেশন সোলে ব্যবহার করবেন না। স্ট্রিং
আলেকজান্ডার - এ পুনর্নির্মাণ মনিকা

130

আপনার প্রয়োজন অনুসারে সুইফট 5 এর সাহায্যে, আপনার সমস্যা সমাধানের জন্য আপনি নীচের খেলার মাঠের নমুনা কোডগুলির মধ্যে একটি চয়ন করতে পারেন।


কোনও বিভাজক ছাড়াই একটি অ্যারে Characterরূপান্তর করা String:

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

print(string)
// prints "John"

কোনও বিভাজক ছাড়াই একটি অ্যারে Stringরূপান্তর করা String:

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

print(string) // prints: "BobDanBryan"

একটি অ্যারের বাঁক Stringএকটি মধ্যে গুলি Stringশব্দের মধ্যে একটি বিভাজক সঙ্গে

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

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

অক্ষরের মধ্যে একটি বিভাজক দিয়ে একটি Stringএর অ্যারে রূপান্তর করা 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"

সংখ্যার মধ্যে বিভাজক দিয়ে একটি Floatএর অ্যারে রূপান্তর করা 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"

আমার কাছে একটি স্ট্রিং রয়েছে যা দেখতে দেখতে: "[1,2,3]"। এটিকে সহজে অ্যারে [ইনট] এ রূপান্তর করার কোনও উপায় আছে কি? সহজেই কি। বিপরীত কি? বিবরণ না?
ব্যবহারকারী 2363025

@ ব্যবহারকারী 2363025 ইউনি ইউএসএস ডিকোডার ব্যবহার করতে পারেন। try JSONDecoder().decode([Int].self, from: Data(string.utf8))
লিও ডাবাস

48

সুইফট ২.০ এক্সকোড .0.০ বিটা on এর 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
}

23

সুইফট 3

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

1
আমি যা বলতে চাই এটি [ "আমি ভালবাসা", "সত্বর"] হল যোগদান (বিভাজক: "")।
Loebre


11

যেহেতু কেউ কমার কথা উল্লেখ করেনি, তাই এটি এখানে:

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

ক্রিয়ামূলক প্রোগ্রামিং এর চেতনায় 🤖


3
জিনিস, ধন্যবাদ এরকম সুন্দর ভাবে ... কমান্ড লাইন একটি খাটো শেষ যোগ: [0,1,1,0].map{"\($0)"}.reduce("",+)। 😉
XLE_22

@ XLE_22[0,1,1,0].map(String.init).joined()
লিও ডাবাস

8

Ptionচ্ছিক / অ-ptionচ্ছিক স্ট্রিংগুলির একটি অ্যারে পরিবর্তন করতে

//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)

এখানে ফ্ল্যাটম্যাপ , কমপ্যাক্টম্যাপ অ্যারেতে শূন্য মানগুলি এড়িয়ে যায় এবং একটি যুক্ত স্ট্রিং দিতে অন্যান্য মানগুলিকে সংযোজন করে


3
@ যশবেদি সুইফট 4-এ আমরা ফ্ল্যাটম্যাপের পরিবর্তে কমপ্যাক্ট ম্যাপ ব্যবহার করি
এজেন্ট স্মিথ

"$" এর অর্থ কী?
আগস্টো

2
@ অগস্টো সুইফট স্বয়ংক্রিয়ভাবে শর্টহ্যান্ড আর্গুমেন্টের নামগুলি ইনলাইন ক্লোজারগুলিতে সরবরাহ করে, যা ক্লোজারের আর্গুমেন্টের মানগুলিকে $ 0, $ 1, $ 2 নামে উল্লেখ করতে ব্যবহার করা যেতে পারে। এখানে, $ 0 বন্ধের প্রথম স্ট্রিং আর্গুমেন্টগুলি উল্লেখ করে।
এজেন্ট স্মিথ

4

খনি JSONEDByString এর সাথে এনএসমিটেবলআরেতে কাজ করে

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

4

সুইফট ২.২-এ আপনাকে উপাদানগুলি জয়ডবাইস্ট্রিং (",") ব্যবহার করতে NSArray এ আপনার অ্যারে নিক্ষেপ করতে হতে পারে

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

উপায় দ্বারা এটি দ্রুতগতিতে উদ্দেশ্য-সি এর অনুবাদ is
মুহাম্মদ জিশান

3

আপনি যদি অ্যারেতে খালি স্ট্রিংগুলি খনন করতে চান।

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

আপনি যদি শূন্য মানগুলি ফিল্টার করতে চান তবে:

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

1
খুব মার্জিত, আপনাকে ধন্যবাদ :)
CHESireKat

2
let arrayTemp :[String] = ["Mani","Singh","iOS Developer"]
    let stringAfterCombining = arrayTemp.componentsJoinedByString(" ")
   print("Result will be >>>  \(stringAfterCombining)")

ফলাফলটি হবে >>> মণি সিং আইওএস বিকাশকারী


1

আপনি যেটির বর্ণনা দিচ্ছেন তার সমতুল্য হ'ল স্ট্রিং ইন্টারপোলেশন। আপনি যদি জাভাস্ক্রিপ্ট করার মতো জিনিস সম্পর্কে ভাবছেন "x" + arrayতবে সুইফটের সমতুল্য "x\(array)"

একটি সাধারণ নোট হিসাবে, Printableপ্রোটোকল বনাম স্ট্রিং অন্তরঙ্গনের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে । শুধুমাত্র কিছু নির্দিষ্ট ক্লাস মেনে চলে Printableপ্রতিটি শ্রেণি একরকম ফাঁকে ফাঁকে ফেলা যায়। জেনেরিক ফাংশন লেখার সময় এটি সহায়ক। আপনাকে নিজেকে Printableক্লাসে সীমাবদ্ধ করতে হবে না ।


1

আপনি মুদ্রণ ফাংশন ব্যবহার করে যে কোনও বস্তু মুদ্রণ করতে পারেন

অথবা যে \(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

বিভাজক হিব্রু বা জাপানি জাতীয় কিছু ভাষার পক্ষে খারাপ ধারণা হতে পারে। এটা চেষ্টা কর:

// 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

আপনার যদি স্ট্রিং অ্যারের তালিকা থাকে তবে তারপরে ইনটে রূপান্তর করুন

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

এটি আপনাকে স্ট্রিংয়ের মান দেবে


0

যে কোনও এলিমেন্ট ধরণের জন্য

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

এটা চেষ্টা কর:

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: ",")

-1

সুইফট 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
    }
}

-1

যদি আপনি প্রশ্নটি এরকম কিছু হন তবে: tobeFormattedString = ["a", "b", "c"] আউটপুট = "এবিসি"

String(tobeFormattedString)


না, এটি কাজ করে না। Stringএটি করতে সক্ষম কোনও আরম্ভকারী নেই। হয় আপনি একটি কাস্টম এক্সটেনশন বা তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করছেন, বা আপনি সহজভাবে ভুল করেছেন।
এরিক আয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.