সুইফ্ট স্ট্রিংকে অ্যারেতে রূপান্তর করুন


133

আমি কীভাবে একটি সুইটকে "হ্যালো" একটি অ্যারে ["এইচ", "ই", "ল", "ল", "ও"] এ রূপান্তর করতে পারি?

উদ্দেশ্য-সিতে আমি এটি ব্যবহার করেছি:

NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
    NSString *ichar  = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
    [characters addObject:ichar];
}

উত্তর:


338

এটি সুইফটে আরও সহজ:

let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o,  , 🐶, 🐮,  , 🇩🇪]

এটি সত্য যে ব্যবহার করে

  • একটি Arrayথেকে তৈরি করা যেতে পারে SequenceType, এবং
  • Stringকে কনর্ফাম করে SequenceTypeপ্রোটোকল, এবং তার ক্রম জেনারেটরের উল্লেখ অক্ষর।

এবং যেহেতু সুইফ্ট স্ট্রিংগুলির ইউনিকোডের সম্পূর্ণ সমর্থন রয়েছে, এটি "বেসিক বহুভাষিক প্লেন" (যেমন 🐶) এর বাইরে এবং বর্ধিত গ্রাফেমি ক্লাস্টারগুলির (যেমন 🇩🇪, যা আসলে দুটি ইউনিকোড স্কেলারের সমন্বয়ে গঠিত ) অক্ষরের সাথেও কাজ করে ।


আপডেট: সুইফট 2 হিসাবে, String আর মান্য করে না SequenceType, তবে charactersসম্পত্তিটি ইউনিকোডের অক্ষরগুলির ক্রম সরবরাহ করে:

let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)

এটি সুইফ্ট 3 - তেও কাজ করে ।


আপডেট: সুইফ্ট 4 হিসাবে, String (আবার) এর Characterএর সংগ্রহ :

let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]

1
আপনার কোন ধারণা আছে কেন let joined = ", ".join(characters);অ্যারে যোগদানের চেষ্টা করার ফলে ( ) 'String' is not identical to 'Character'ত্রুটি হয়?
মোহামাদ

3
@ মোহমাদ: একটি স্ট্রিং গণনা করা অক্ষরের ক্রম তৈরি করে, তবে ", ".join(...)একটি স্ট্রিংয়ের অ্যারের আশা করে। নীচে ডেভক্সুলের উত্তরটি দেখায় যে আপনি কীভাবে স্ট্রিংগুলির অ্যারেতে বিভক্ত হতে পারেন।
মার্টিন আর

2
@ ফোনিক্স: স্ট্রিং অক্ষরগুলির charactersজন্য একটি সংগ্রহ এবং একটি দৃশ্য । অক্ষরগুলি থেকে একটি অ্যারে তৈরি করা একটি অনুলিপি তৈরি করে। - অবশ্যই অক্ষরগুলি সরাসরি অ্যাক্সেস করতে পারবেন: for i in string.characters.indices { print(string.characters[i]) }বা কেবলfor c in string.characters { print(c) }
মার্টিন আর

2
@ ফনিক্স: ... অন্যদিকে, স্ট্রিমগুলিতে এলোমেলোভাবে সূচী করা ধীর হতে পারে এবং একবারে সমস্ত অক্ষর দিয়ে একটি অ্যারে তৈরি করা সুবিধাজনক হতে পারে। উদাহরণ: স্ট্যাকওভারফ্লো . com / প্রশ্নগুলি / 40371929/…
মার্টিন আর

2
@ ডানিস্প্রিঞ্জার: সুইফট 4 বর্তমানে বিটাতে রয়েছে, আপনার এক্সকোড 9 বিটা দরকার: ডেভেলপার.এপলল / সুইফট / রিসোর্সস ।
মার্টিন আর

102

সম্পাদনা করুন (সুইফট 4)

সুইফ্ট 4 এ আপনাকে ব্যবহার charactersকরতে হবে না map()। শুধু map()স্ট্রিং উপর।

let letters = "ABC".map { String($0) }
print(letters) // ["A", "B", "C"]
print(type(of: letters)) // Array<String>

অথবা আপনি যদি খাটো পছন্দ করেন: "ABC".map(String.init)(2 বাইট 😀)

সম্পাদনা করুন (সুইফট 2 এবং সুইফট 3)

সুইফট 2 এবং সুইফ্ট 3 এ, আপনি সম্পত্তি map()থেকে ফাংশন ব্যবহার করতে পারেন characters

let letters = "ABC".characters.map { String($0) }
print(letters) // ["A", "B", "C"]

আসল (সুইফট 1.x)

গৃহীত উত্তর, সেরা হতে কারণ ক্রম-রূপান্তরিত বলে মনে হচ্ছে না Stringএকটি নয় Stringক্রম কিন্তু Character:

$ swift
Welcome to Swift!  Type :help for assistance.
  1> Array("ABC")
$R0: [Character] = 3 values {
  [0] = "A"
  [1] = "B"
  [2] = "C"
}

এটি নীচে আমার পক্ষে কাজ করে:

let str = "ABC"
let arr = map(str) { s -> String in String(s) }

গ্লোবাল ফাংশনের জন্য রেফারেন্সটি map()এখানে: http://swifter.natecook.com/func/map/


12
সামান্য খাটো:arr = map(str) { String($0) }
মার্টিন আর

1
ব্যবহার করুন Array: তার জন্যে সূচনাকারীArray("ABC".characters)
chrisamanse

1
@chrisamanse আছে মধ্যে কোন পার্থক্য "ABC".charactersএবং Array("ABC".characters)
devxoul

2
এটা তোলে 3. সুইফট মধ্যে আলাদা "ABC".charactersরিটার্ন একটি টাইপ String.CharacterView। এটিকে একটি অ্যারেতে রূপান্তর করতে, বিশেষত টাইপের [Character], আপনাকে Arrayএটিতে আরম্ভকারীটি ব্যবহার করতে হবে।
ক্রিসমাসে

2
@ ক্রিসাম্যানসে ওহ, আমি এটি জানতাম না। আমি ভৃল ছিলাম. এটা ইশারা জন্য ধন্যবাদ। যাইহোক, আমি [String]পরিবর্তে [Character]চেয়েছিলাম কারণ অপ একটি স্ট্রিং অ্যারে চেয়েছিল :)
devxoul

22

স্ট্রিংয়ে এই দরকারী কার্যকারিতা রয়েছে: উপাদানগুলি (বিচ্ছিন্নভাবে: স্ট্রিং)

let string = "1;2;3"
let array = string.components(separatedBy: ";")
print(array) // returns ["1", "2", "3"]

";" এর মতো একটি চরিত্র দ্বারা পৃথক স্ট্রিংগুলি মোকাবেলায় ভাল কাজ করে; এমনকি "\ n"


8

সুইফট 4-র জন্য আপডেট হয়েছে

এখানে 3 টি উপায়।

//array of Characters
let charArr1 = [Character](myString)

//array of String.element
let charArr2 = Array(myString)

for char in myString {
  //char is of type Character
}

কিছু ক্ষেত্রে, লোকেরা যা চায় তা হ'ল একটি স্ট্রিংকে প্রতিটি ছোট ছোট দৈর্ঘ্যের দৈর্ঘ্যের ছোট ছোট স্ট্রিংগুলিতে রূপান্তর করার একটি উপায়। এটি করার জন্য এখানে একটি দুর্দান্ত দক্ষ উপায়:

//array of String
var strArr = myString.map { String($0)}

সুইফট 3

এখানে 3 টি উপায়।

let charArr1 = [Character](myString.characters)
let charArr2 = Array(myString.characters)
for char in myString.characters {
  //char is of type Character
}

কিছু ক্ষেত্রে, লোকেরা যা চায় তা হ'ল একটি স্ট্রিংকে প্রতিটি ছোট ছোট দৈর্ঘ্যের দৈর্ঘ্যের ছোট ছোট স্ট্রিংগুলিতে রূপান্তর করার একটি উপায়। এটি করার জন্য এখানে একটি দুর্দান্ত দক্ষ উপায়:

var strArr = myString.characters.map { String($0)}

অথবা আপনি স্ট্রিংয়ে একটি এক্সটেনশন যুক্ত করতে পারেন।

extension String {
   func letterize() -> [Character] {
     return Array(self.characters)
  }
}

তারপরে আপনি এটিকে এভাবে কল করতে পারেন:

let charArr = "Cat".letterize()


3

মার্টিন আর উত্তরটি সর্বোত্তম পন্থা, এবং তিনি যেমন বলেছিলেন, স্ট্রিং স্কোয়েন্সটাইপ প্রোটোকল অনুসারে, আপনি প্রতিটি পুনরুক্তিতে প্রতিটি চরিত্র পেয়ে একটি স্ট্রিংও গণনা করতে পারেন।

let characters = "Hello"
var charactersArray: [Character] = []

for (index, character) in enumerate(characters) {
    //do something with the character at index
    charactersArray.append(character)
}

println(charactersArray)

2
অথবা ঠিক for character in characters { charactersArray.append(character)}ছাড়াইenumeration()
টাইম

3

এর Stringসংগ্রহ হিসাবে সুইফট 4-এ Characterআপনাকে ব্যবহার করা দরকারmap

let array1 = Array("hello") // Array<Character>
let array2 = Array("hello").map({ "\($0)" }) // Array<String>
let array3 = "hello".map(String.init) // Array<String>

3

এটি করার একটি সহজ উপায় mapপরিবর্তনশীল এবং প্রতিটি Characterহিসাবে একটি হিসাবে ফিরে আসা String:

let someText = "hello"

let array = someText.map({ String($0) }) // [String]

আউটপুট হওয়া উচিত ["h", "e", "l", "l", "o"]


1

আপনি একটি এক্সটেনশনও তৈরি করতে পারেন:

var strArray = "Hello, playground".Letterize()

extension String {
    func Letterize() -> [String] {
        return map(self) { String($0) }
    }
}

1
func letterize() -> [Character] {
    return Array(self.characters)
}

2
আপনি কেন আরও কার্যকর তথ্য সরবরাহ করতে পারেন? :)
, pix

1
@ পিক্স আমি মনে করি তিনি স্ট্রিংয়ের একটি এক্সটেনশনে সংজ্ঞায়িত একটি ফাংশন হিসাবে বোঝাতে চেয়েছিলেন। আমি আমার উত্তরে এটি যুক্ত করব।
স্কটিবিলেডস

1

স্ট্রিংয়ের জন্য ফাংশনের জন্য: উপাদানগুলি (বিচ্ছিন্নভাবে: স্ট্রিং)

সুইফটে 5.1

এতে পরিবর্তন করুন:

string.split(separator: "/")

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