একটি স্ট্রিংয়ের দৈর্ঘ্য পান


781

আপনি কিভাবে একটি দৈর্ঘ্য পেতে String? উদাহরণস্বরূপ, আমার মত একটি ভেরিয়েবল সংজ্ঞায়িত রয়েছে:

var test1: String = "Scott"

যাইহোক, আমি স্ট্রিংয়ের মধ্যে কোনও দৈর্ঘ্যের পদ্ধতি খুঁজে পাচ্ছি না।



সুইফট ৩ এর কারণে আমাকে ম্যানুয়ালি প্রচুর কোড মাইগ্রেট করতে হয়েছিল তাই আমি এক্সটেনশন তৈরির সিদ্ধান্ত নিয়েছি। সুতরাং এখন, যদি কোনও নতুন বড় রিলিজে আপগ্রেড করতে হয় তবে আমার কেবল এক্সটেনশানটি স্থানান্তর করতে হবে। এখানে আপনি তৈরি করা কিছু সুইফট 3 এক্সটেনশানগুলি পেতে পারেন। github.com/tukur187/Swift3
শেলজেন

উত্তর:


1284

সুইফ্ট 4+ হিসাবে

এটা শুধু:

test1.count

কারণে.

(মার্টিন আর কে ধন্যবাদ)

সুইফট 2 হিসাবে:

সুইফট ২-এর সাহায্যে অ্যাপল গ্লোবাল ফাংশনগুলিকে প্রোটোকল এক্সটেনশনগুলিতে পরিবর্তন করেছে, প্রোটোকলের সাথে মানানসই যে কোনও প্রকারের সাথে মেলে এমন এক্সটেনশনগুলি। সুতরাং নতুন সিনট্যাক্সটি হ'ল:

test1.characters.count

(মাথা উঁচু করার জন্য জনডিফুলকে ধন্যবাদ)

সুইফট 1 হিসাবে

গণনা অক্ষরের পদ্ধতিটি ব্যবহার করুন:

let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
println("unusualMenagerie has \(count(unusualMenagerie)) characters")
// prints "unusualMenagerie has 40 characters"

ঠিক অ্যাপল সুইফট গাইড থেকে

(দ্রষ্টব্য, সুইফটের সংস্করণগুলির জন্য 1.2 ​​এরও আগে, এটি countElements(unusualMenagerie)পরিবর্তে হবে)

আপনার পরিবর্তনশীল জন্য, এটি হবে

length = count(test1) // was countElements in earlier versions of Swift

অথবা আপনি test1.utf16count ব্যবহার করতে পারেন


11
আকর্ষণীয় যে কাউন্টের উপাদানগুলি একটি বিশ্বব্যাপী ফাংশন। গ্লোবাল ফাংশনগুলির একটি তালিকা আছে?
স্কট ওয়াল্টার

7
কাউন্টের উপাদানগুলির সমস্যাটি হ'ল এটি এটির মতো ঘোষিত হয়: func countElements <T> (x: T) -> T.IndexType.DistanceType এবং রিটার্ন টাইপ + ক্রিয়াকলাপ গ্রহণ করে না।
মার্ক অরেলিয়াস

288
একটি শক্তিশালী দৈর্ঘ্যের পদ্ধতি যুক্ত করা খুব কঠিন ছিল। (রাগে তার মুষ্টি উত্থাপন)
বটবট

13
সুইফট 2 দিয়ে আমি কেবল এটির কাজ করতে পারি: লেট = টেস্ট 1.characters.count
লরেন্ট

7
নোট করুন যে সুইফট 4 সহ, এটি হবে string.count
মার্টিন আর

335

TLDR:

জন্য সুইফট 2.0 এবং 3.0, ব্যবহার test1.characters.count। তবে, কয়েকটি জিনিস আপনার জানা উচিত। সুতরাং, পড়ুন।

সুইফটে অক্ষর গণনা করা হচ্ছে

সুইফট ২.০ এর আগে countএকটি বিশ্বব্যাপী কাজ ছিল। সুইফট ২.০ হিসাবে, এটি সদস্য ফাংশন হিসাবে বলা যেতে পারে।

test1.characters.count

এটি একটিতে ইউনিকোডের অক্ষরের প্রকৃত সংখ্যাটি ফিরিয়ে দেবে String, সুতরাং এটি অর্থে সবচেয়ে সঠিক বিকল্প যে আপনি যদি স্ট্রিংটি মুদ্রণ করতে এবং হাতের সাথে অক্ষর গণনা করেন তবে আপনি একই ফলাফল পেয়ে যাবেন।

যাইহোক, Stringsউপায়টি সুইফটে বাস্তবায়িত হওয়ার কারণে , অক্ষরগুলি সর্বদা একই পরিমাণের মেমরি গ্রহণ করে না, তাই সচেতন হন যে এটি অন্যান্য ভাষায় স্বাভাবিক অক্ষর গণনা পদ্ধতির চেয়ে বেশ আলাদা আচরণ করে।

উদাহরণস্বরূপ, আপনি এটি ব্যবহার করতে পারেন test1.utf16.count

কিন্তু, নিচের উল্লিখিত ফিরে মান কলিং যে একই হতে নিশ্চিত করা হয় না countউপর characters

ভাষার রেফারেন্স থেকে:

বর্ধিত গ্রাফি ক্লাস্টারগুলি এক বা একাধিক ইউনিকোড স্কেলারের সমন্বয়ে গঠিত হতে পারে। এর অর্থ হ'ল বিভিন্ন অক্ষর এবং একই চরিত্রের বিভিন্ন উপস্থাপনা — সঞ্চয় করতে বিভিন্ন পরিমাণের মেমরির প্রয়োজন হতে পারে। এ কারণে, সুইফ্টের অক্ষরগুলি প্রতিটি স্ট্রিংয়ের উপস্থাপনের মধ্যে একই পরিমাণের মেমরি গ্রহণ করে না। ফলস্বরূপ, স্ট্রিংয়ের অক্ষরগুলির সংখ্যা তার প্রসারিত গ্রাফিয়াম ক্লাস্টার সীমানা নির্ধারণের জন্য স্ট্রিংটির মাধ্যমে পুনরাবৃত্তি না করে গণনা করা যায় না। আপনি যদি বিশেষত দীর্ঘ স্ট্রিং মানগুলির সাথে কাজ করছেন তবে সচেতন হন যে অক্ষরের বৈশিষ্ট্যটি অবশ্যই সেই স্ট্রিংয়ের জন্য অক্ষরগুলি নির্ধারণ করার জন্য পুরো স্ট্রিংয়ে ইউনিকোড স্কেলারের উপরে পুনরাবৃত্তি করতে হবে।

অক্ষরের বৈশিষ্ট্য দ্বারা ফিরে আসা অক্ষরের গণনা সর্বদা কোনও এনএসএসস্ট্রিংয়ের দৈর্ঘ্যের সম্পত্তি হিসাবে একই অক্ষর সমেত এক হয় না। একটি এনএসএসস্ট্রিংয়ের দৈর্ঘ্য স্ট্রিংয়ের ইউটিএফ -16 উপস্থাপনার মধ্যে 16 বিট কোড ইউনিটের সংখ্যার উপর ভিত্তি করে এবং স্ট্রিংয়ের মধ্যে ইউনিকোড বর্ধিত গ্রাফি ক্লাস্টারের সংখ্যার উপর ভিত্তি করে নয়।

উপরোক্ত বর্ণিত পরিস্থিতিটি পুরোপুরি চিত্রিত করে এমন একটি উদাহরণ মন্তব্যগুলিতে n00neimp0rtant দ্বারা নির্দেশিত হিসাবে একটি একক ইমোজি চরিত্রযুক্ত স্ট্রিংয়ের দৈর্ঘ্য পরীক্ষা করা ।

var emoji = "👍"
emoji.characters.count             //returns 1
emoji.utf16.count                  //returns 2

26
আমি আপনার বিস্তারিত এবং সাবধানী উত্তরের প্রশংসা করি, তবে আমাকে স্বীকার করতে হবে এটি আমাকে অস্বস্তিতে ফেলেছে। আপনি আমাকে একটি স্ট্রিংয়ের দৈর্ঘ্য পাওয়ার জন্য 3 টি উপায় দিয়েছিলেন, অস্বীকারার সাথে সাথে তারা যে উত্তরগুলি দেয় তা আপনার প্রত্যাশার মতো নাও হতে পারে। স্ট্রিংয়ের একটি নির্ভুল, নির্ভরযোগ্য দৈর্ঘ্যের মান পাওয়ার জন্য সুইফটে কোনও সত্যিকারের নির্ভরযোগ্য উপায় তৈরি হয়নি?
n00neimp0rtant

6
@ n00neimp0rtant। আমি এটি পরিষ্কার না করে থাকলে দুঃখিত। প্রথম সমাধান ( countElements()) স্ট্রিংয়ের অক্ষরের সঠিক সংখ্যা পায়। [str length]আপনি ওজেক্টিভ-সি-তে কল করা থেকে যা পেতে চান তার থেকে এটি আলাদা হতে পারে , কারণ lengthপদ্ধতিটি ধরে নিয়েছে যে স্ট্রিংয়ের সমস্ত অক্ষর 16-বিট কোড ইউনিট সমন্বিত, যখন countElements()ইউনিকোড অক্ষরের আসল সংখ্যা পায়। যাইহোক, উপরের বিকল্পগুলির বেশিরভাগ সময় একই ফলাফল ফিরে আসবে, বিশেষত যদি আপনি ইংরেজি ভাষার সাধারণ অক্ষরগুলি নিয়ে কাজ করছেন।
সেজার

2
@ n00neimp0rtant চেষ্টা করে আরও স্পষ্ট করার জন্য আমি আমার উত্তরটি কিছুটা টুইট করেছি।
সেজার

2
আমি এখন আপনি কি বলতে চাইছেন। আমি কেবল একটি একক ইমোজি অক্ষরযুক্ত স্ট্রিংয়ের দৈর্ঘ্য পাওয়ার চেষ্টা করেছি; অবজেক্টিভ-সি আমাকে 4 এর মান দিয়েছে এবং সুইফট আমাকে 1 এর মান দিয়েছে So সুতরাং এটি আসলে আরও সঠিক বলে মনে হয় (এবং তাই, বিদ্রূপের সাথে "আমি যা প্রত্যাশা করতাম না" = পি)। স্পষ্টতার জন্য ধন্যবাদ!
n00neimp0rtant

1
@ n00neimp0rtant অবিকল! এটি একটি নিখুঁত উদাহরণ। এমনকি আমি এটি উত্তরে যুক্ত করব
সেজার

92

সুইফট ২.২ আপডেট: সংগ্রহের আকার গণনা করার জন্য আর কোনও গণনা উপাদান নেই। প্রতিস্থাপন হিসাবে কেবল গণনা কার্যটি ব্যবহার করুন: গণনা ("সুইফ্ট")

সুইফট 2.0, 3.0 এবং 3.1:

strLength = স্ট্রিং

সুইফট ৪.২ (৪.০ এর পরে): [অ্যাপল ডকুমেন্টেশন - স্ট্রিংস]

strLength = স্ট্রিং.কাউন্ট দিন


61

সুইফট 1.1

extension String {
    var length: Int { return countElements(self) }  // 
}

সুইফট ১.২

extension String {
    var length: Int { return count(self)         }  // 
}

সুইফট ২.০

extension String {
    var length: Int { return characters.count    }  // 
}

সুইফট 4.2

extension String {
    var length: Int { return self.count }           
}

let str = "Hello"
let count = str.length    // returns 5 (Int)

6
হ্যাঁ, আমাদের সুইফটের সিনট্যাক্সের জন্য একটি বিমূর্ত স্তর দরকার যা মাসিক ভিত্তিতে পরিবর্তিত হয়!
কসমিন

@ লাই দেখুন এটি দ্রুতগতিতে 4 কাজ করে না কারণ চরিত্রগুলি হ্রাস করা হয়েছে। আশেপাশে তিমির চালা অব্যাহত রয়েছে। দীর্ঘশ্বাস
Eonist

48

সুইফট 4

"string".count

;)

সুইফট 3

extension String {
    var length: Int {
        return self.characters.count
    }
}

ব্যবহার

"string".length


এটি স্ট্রিং.চ্যারাকটারভিউ.ইনডেক্স দূরত্ব দেয়। ইন্ট সম্পর্কে কি?
ইনিস্ট

@ গিটসাইক কোথায়? আমি আপনাকে বুঝতে পারি না
ভায়াচ্লাভ

দ্রুতগতি 4 @Vyacheslav "STRING" .count আয় String.CharacterView.IndexDistance দেখুন আমার উত্তর এখানে: stackoverflow.com/a/47203597/5389500 দ্রুতগতি 3 এবং 4 মধ্যে int- পেতে
eonist

আমি এটি খেলার খেলার মাঠটি পরীক্ষা করেছি:
ভ্যাচাস্লাভ

//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" print(type(of: str.characters.count)) print(type(of: str.count))
ব্যাচ্যাস্লাভ

25

আপনি যদি কেবল কোনও স্ট্রিং ফাঁকা আছে কিনা তা দেখার চেষ্টা করছেন (0 দৈর্ঘ্যের জন্য পরীক্ষা করছেন), সুইফট এতে একটি সাধারণ বুলিয়ান পরীক্ষা পদ্ধতি সরবরাহ করে String

myString.isEmpty

এই মুদ্রার অন্য দিকটি ছিল লোকেরা ওজেক্টিভ সিটিতে জিজ্ঞাসা করেছিল যে যেখানে উত্তরটি 0 দৈর্ঘ্যের জন্য পরীক্ষা করা উচিত সেখানে স্ট্রিং ফাঁকা আছে কিনা তা জিজ্ঞাসা করবেন:

এনএসএসস্ট্রিং খালি


18

tl; dr আপনি যদি মানব-পঠনযোগ্য অক্ষরের সংখ্যার বিচারে কোনও স্ট্রিং টাইপের দৈর্ঘ্য চান তবে countE উপাদান () ব্যবহার করুন । আপনি যদি প্রসারিত গ্রাফিয়াম ক্লাস্টারের সংখ্যার বিচারে দৈর্ঘ্য জানতে চান তবে এন্ডআইডেক্সটি ব্যবহার করুন । বিস্তারিত পড়ুন।

স্ট্রিং টাইপ আদেশ সংগ্রহে ইউনিকোড অক্ষরের (অর্থাত, ক্রম) হিসেবে বাস্তবায়িত হয়, এবং এটি কে কনর্ফাম করে CollectionType প্রোটোকল যা কনর্ফাম _CollectionType প্রোটোকল, যা ইনপুট দ্বারা প্রত্যাশিত ধরনের countElements () । অতএব, একটি স্ট্রিং ধরণ পেরিয়ে কাউন্টএলমেন্টস () বলা যেতে পারে এবং এটি অক্ষরের গণনা ফিরিয়ে দেবে।

যাইহোক, কালেকশন টাইপের সাথে সঙ্গতিপূর্ণ , যা ঘুরেফিরে _ Colલેક્શન টাইপ অনুসারে হয় , স্ট্রিং স্টার্টইন্ডেক্স এবং এন্ড ইন্ডেক্স গণিত বৈশিষ্ট্যগুলি প্রয়োগ করে , যা প্রকৃতপক্ষে প্রথম অক্ষর গুচ্ছের আগে সূচকের অবস্থান এবং যথাক্রমে শেষ অক্ষর গুচ্ছের পরে সূচকের অবস্থান উপস্থাপন করে । সুতরাং, "এ বি সি" স্ট্রিং-এ, এ এর ​​আগে সূচকের অবস্থান 0 হয় এবং সি এর পরে হয় 3 সুতরাং, endIndex = 3, যা স্ট্রিংয়ের দৈর্ঘ্যও।

সুতরাং, এন্ডআইডেক্স কোনও স্ট্রিং টাইপের দৈর্ঘ্য পেতে ব্যবহার করা যেতে পারে, ঠিক আছে তো?

ঠিক আছে, সর্বদা নয় ... ইউনিকোড অক্ষরগুলি আসলে গ্রাথিয়াম ক্লাস্টারগুলিতে প্রসারিত হয় , যা একক একাধিক ইউনিকোড স্কেলারের একত্রিত হয়ে একটি একক মানব-পঠনযোগ্য চরিত্র তৈরি করে।

let circledStar: Character = "\u{2606}\u{20DD}" // ☆⃝

সার্কেলড স্টার হ'ল ইউ + 2606 (একটি সাদা তারা) এবং ইউ + 20 ডিডি (একটি সংমিশ্রিত এনক্লোজিং বৃত্ত) দ্বারা গঠিত একক অক্ষর। আসুন বৃত্তাকার স্টার থেকে একটি স্ট্রিং তৈরি করি এবং কাউন্টএলিমেন্টের ফলাফল () এবং এন্ডআইডেক্সের তুলনা করি

let circledStarString = "\(circledStar)"
countElements(circledStarString) // 1
circledStarString.endIndex // 2

15

সুইফট ২.০ এ countআর কাজ করে না। পরিবর্তে আপনি এটি ব্যবহার করতে পারেন:

var testString = "Scott"
var length = testString.characters.count

14

এখানে একটি বিশ্বব্যাপী ফাংশন ব্যবহারের চেয়ে আরও খাটো এবং প্রাকৃতিক কিছু:

aString.utf16count

যদিও এটি বিটা 1 এ পাওয়া যায় তা আমি জানি না। তবে এটি অবশ্যই বিটা 2-তে রয়েছে।


2
সেজারের উত্তর দেখুন। বেশিরভাগ লোকের "চরিত্র" এর সংজ্ঞা দেওয়ার জন্য এটি আপনাকে স্ট্রিংয়ের "অক্ষর" সংখ্যাটি দেবে না। তারপরে আবার, উভয়ই উদ্দেশ্য-সি করেনি - আপনি যত্ন করছেন বা না সে বিষয়ে সিদ্ধান্ত নেওয়া আপনার পক্ষে।
jbg

12

সুইফ্ট 5.1, 5

let flag = "🇵🇷"

print(flag.count)
// Prints "1" --  Counts the characters and emoji as length 1

print(flag.unicodeScalars.count)
// Prints "2" --  Counts the unicode lenght ex. "A" is 65

print(flag.utf16.count)
// Prints "4"

print(flag.utf8.count)
// Prints "8"

11

এক্সকোড 6 বিটা 4 এর জন্য আপডেট হয়েছে, পদ্ধতিটি পরিবর্তন করুন utf16count -> utf16 অ্যাকাউন্ট

 var test1: String = "Scott"
 var length =  test1.utf16Count

অথবা

 var test1: String = "Scott"
 var length = test1.lengthOfBytesUsingEncoding(NSUTF16StringEncoding)

আপনি যখন ইমোজি দিয়ে জটিল স্ট্রিং ব্যবহার করছেন তখন উত্তরটি utf16countভুল হবে
ভিক্টর সিগলার

10

হিসাবে সুইফট 1.2 utf16Countঅপসারণ করা হয়েছে। আপনার এখন গ্লোবাল count()ফাংশনটি ব্যবহার করা উচিত এবং স্ট্রিংয়ের ইউটিএফ 16 ভিউটি পাস করা উচিত । নীচে উদাহরণ ...

let string = "Some string"
count(string.utf16)

1
এটি .utf16 অ্যাকাউন্টের চেয়ে ধীর?
samir105

1
এটি .utf16 অ্যাকাউন্ট হিসাবে একই গতি বলে মনে হচ্ছে, গণনার চেয়ে অনেক দ্রুত (স্ট্রিং)
samir105

8

এক্সকোড 7.3 এবং সুইফট 2.2 এর জন্য।

let str = "🐶"
  1. আপনি যদি ভিজ্যুয়াল অক্ষরের সংখ্যা চান:

    str.characters.count
  2. আপনি যদি স্ট্রিংয়ের UTF-16 উপস্থাপনার মধ্যে "16-বিট কোড ইউনিট চান":

    str.utf16.count

বেশিরভাগ সময়, 1 আপনার প্রয়োজন হয়।

আপনার কখন 2 দরকার হবে ? আমি 2 এর জন্য একটি ব্যবহারের কেস পেয়েছি :

let regex = try! NSRegularExpression(pattern:"🐶", 
    options: NSRegularExpressionOptions.UseUnixLineSeparators)
let str = "🐶🐶🐶🐶🐶🐶"
let result = regex.stringByReplacingMatchesInString(str, 
    options: NSMatchingOptions.WithTransparentBounds, 
    range: NSMakeRange(0, str.utf16.count), withTemplate: "dog")
print(result) // dogdogdogdogdogdog

আপনি যদি 1 টি ব্যবহার করেন তবে ফলাফলটি ভুল:

let result = regex.stringByReplacingMatchesInString(str, 
    options: NSMatchingOptions.WithTransparentBounds, 
    range: NSMakeRange(0, str.characters.count), withTemplate: "dog")
print(result) // dogdogdog🐶🐶🐶

7

আপনি এই মত চেষ্টা করতে পারে

var test1: String = "Scott"
var length =  test1.bridgeToObjectiveC().length

4
যে হিসাবে একইtest1.utf16count
Sulthan

1
@ ভ্লাদফ ভাল, এটি "ধরণের" কাজ করে। সেজারের উত্তর দেখুন।
jbg

6

সুইফট ২.x-এ নিম্নলিখিত পংক্তির দৈর্ঘ্য কীভাবে সন্ধান করতে হবে তা নিম্নলিখিত

let findLength = "This is a string of text"
findLength.characters.count

24 প্রদান


5

সুইফট ২.০: একটি গণনা পান: yourString.text.characters.count

এটি কীভাবে কার্যকর হবে তার মজার উদাহরণটি ইউআইটিেক্সটভিউতে কিছু নম্বর (উদাহরণস্বরূপ 150) থেকে একটি চরিত্রের কাউন্টডাউন দেখানো হবে:

func textViewDidChange(textView: UITextView) {
    yourStringLabel.text = String(150 - yourStringTextView.text.characters.count)
}

4

সুইফট 4-এ আমি সর্বদা ব্যবহার string.countকরেছি আজ অবধি আমি এটি পেয়েছি

string.endIndex.encodedOffset

এটি আরও ভাল বিকল্প কারণ এটি দ্রুত - 50 000 অক্ষরের স্ট্রিং এর চেয়ে প্রায় 6 বার দ্রুত .count.countস্ট্রিং দৈর্ঘ্য উপর নির্ভর করে কিন্তু .endIndex.encodedOffsetনা।

তবে একটি নেই। ইমোজিসের সাথে স্ট্রিংয়ের পক্ষে এটি ভাল নয়, এটি ভুল ফলাফল দেবে, তাই কেবল .countসঠিক।


3

ইন সুইফট 4 : না স্ট্রিং হলে ইউনিকোড অক্ষর এর পরে নিম্নলিখিত ব্যবহার

let str : String = "abcd"
let count = str.count // output 4

যদি স্ট্রিংটিতে ইউনিকোড অক্ষর থাকে তবে নিম্নলিখিতগুলি ব্যবহার করুন:

let spain = "España"
let count1 = spain.count // output 6
let count2 = spain.utf8.count // output 7

আপনি কেন ব্যবহার করতে চান utf8.count? এটি অক্ষরের গণনা দেয় না। এটি স্ট্রিংয়ের ইউটিএফ -8 এনকোডিংয়ের জন্য প্রয়োজনীয় বাইটের সংখ্যা দেয়।
rmaddy

2

এক্সকোডে 6.1.1

extension String {    
    var length : Int { return self.utf16Count  }
}

আমি মনে করি যে মস্তিষ্কে প্রতিটি ছোটখাট সংস্করণে এটি পরিবর্তন হবে।


2

আপনার পাঠ্যদর্শন বা পাঠ্য ক্ষেত্র থেকে স্ট্রিং মান পান:

let textlengthstring = (yourtextview?.text)! as String

স্ট্রিংয়ের মধ্যে অক্ষরের সংখ্যাটি সন্ধান করুন:

let numberOfChars = textlength.characters.count

2

এখানেই আমি শেষ করেছিলাম

let replacementTextAsDecimal = Double(string)

if string.characters.count > 0 &&
    replacementTextAsDecimal == nil &&
    replacementTextHasDecimalSeparator == nil {
        return false
}

আমি মনে করি আপনি কেবল স্ট্রিংয়ের দৈর্ঘ্য পাওয়ার চেয়ে আরও বেশি কিছু করার চেষ্টা করছেন এবং যে কোনও ক্ষেত্রে এটি অসম্পূর্ণ দেখায় (কোনও ক্ষেত্রেও হওয়া উচিত নয় return true?)। আপনি দয়া করে ডাবল চেক করতে পারেন এবং, ক্ষেত্রে, আপনার উত্তর সম্পাদনা করতে পারেন? ধন্যবাদ!
ফ্যাবিও মনিকা 22

2

সুইফট 4 আপডেটটি সুইফট 3 এর সাথে তুলনা করে

সুইফট 4 স্ট্রিংয়ের জন্য একটি অক্ষরের অ্যারের প্রয়োজনীয়তা সরিয়ে দেয়। এর অর্থ আপনি countঅক্ষরে প্রথমে অ্যারে না পেয়ে সরাসরি স্ট্রিংয়ে কল করতে পারেন ।

"hello".count                  // 5

যেখানে সুইফ্ট 3 এ আপনাকে অক্ষরের অ্যারে পেতে হবে এবং তারপরে সেই অ্যারেতে উপাদান গণনা করতে হবে। নোট করুন যে নিম্নলিখিত পদ্ধতিটি এখনও সুইফট ৪.০ এ উপলব্ধ কারণ আপনি এখনও charactersপ্রদত্ত স্ট্রিংয়ের অক্ষরের অ্যারে অ্যাক্সেস করতে কল করতে পারেন

"hello".characters.count       // 5

সুইফট 4.0 ইউনিকোড 9 গ্রহণ করে এবং এটি এখন গ্রাফি ক্লাস্টারদের ব্যাখ্যা করতে পারে। উদাহরণস্বরূপ, ইমোজি তে গণনা আপনাকে 1 প্রদান করবে যখন সাফ 3.0 in এ, আপনি 1 এর চেয়ে বেশি গণনা পেতে পারেন।

"👍🏽".count // Swift 4.0 prints 1, Swift 3.0 prints 2
"👨‍❤️‍💋‍👨".count // Swift 4.0 prints 1, Swift 3.0 prints 4

2

সুইফট 4

let str =  "Your name"

str.count 

মনে রাখবেন: স্পেসটিও সংখ্যাটিতে গণনা করা হয়


2

আপনি সহজেই একটি এক্সটেনশান লিখে দৈর্ঘ্য পেতে পারেন:

extension String {
    // MARK: Use if it's Swift 2
    func stringLength(str: String) -> Int {
        return str.characters.count
    }

    // MARK: Use if it's Swift 3
    func stringLength(_ str: String) -> Int {
        return str.characters.count
    }

    // MARK: Use if it's Swift 4
    func stringLength(_ str: String) -> Int {
        return str.count
    }
}

1
var str = "Hello, playground"
var newString = str as NSString    

countElements(str)

এটি নিয়মিত সুইফ্ট স্ট্রিংয়ের চরিত্রগুলি গণনা করে

countElements((newString as String))    

এটি একটি এনএসএস স্ট্রিংয়ে অক্ষর গণনা করে


1

সুইফটে স্ট্রিং গণনা করার সর্বোত্তম উপায় হ'ল:

var str = "Hello World"
var length = count(str.utf16)

2
আপনার কেবল গণনা (টিআর) ব্যবহার করা উচিত। সাব স্ট্রিং অগ্রিম () এর সাথে টিউ ইউজ কাউন্ট (str.utf16) চেষ্টা করুন
লিও ডাবাস

1

স্ট্রিং এবং এনএসএসস্ট্রিং টোল ফ্রি ব্রিজ তাই আপনি এনএসএসস্ট্রিংয়ের জন্য উপলব্ধ সমস্ত পদ্ধতি সুইফ্ট স্ট্রিং সহ ব্যবহার করতে পারবেন

let x = "test" as NSString
let y : NSString = "string 2"
let lenx = x.count
let leny = y.count

1
test1.characters.count

আপনার স্ট্রিংয়ে আপনি অক্ষর / সংখ্যা ইত্যাদির সংখ্যা পাবেন।

উদা:

test1 = "StackOverflow"

print(test1.characters.count)

( " 13 " মুদ্রণ )


1

অ্যাপল এটিকে অন্য প্রধান ভাষা থেকে আলাদা করেছে। বর্তমান উপায় কল করতে হয়:

test1.characters.count

যাইহোক, সাবধানতা অবলম্বন করার জন্য, আপনি যখন দৈর্ঘ্যটি বলতে চান তার অর্থ অক্ষরের সংখ্যা গণনা বাইটের গণনা নয়, কারণ যখন আপনি অ-এসিআই অক্ষর ব্যবহার করেন তখন এই দুটি আলাদা হতে পারে।

উদাহরণ স্বরূপ; "你好啊hi".characters.countআপনাকে 5 দিবে তবে এটি বাইটের গণনা নয়। বাইটগুলির প্রকৃত গণনা পেতে, আপনাকে তা করতে হবে "你好啊hi".lengthOfBytes(using: String.Encoding.utf8)। এটি আপনাকে 11 দেবে।


1

এখনই (সুইফট ২.৩ এ) আপনি যদি ব্যবহার করেন:

myString.characters.count 

পদ্ধতিটি "দূরত্ব" টাইপটি ফিরিয়ে দেবে, যদি কোনও পূর্ণসংখ্যা ফেরত দেওয়ার জন্য আপনার যদি পদ্ধতিটির প্রয়োজন হয় তবে আপনার এভাবে কাস্ট টাইপ করা উচিত:

var count = myString.characters.count as Int

2
Distanceএর String.CharacterView হয় Int , এই ঢালাই জন্য কোন প্রয়োজন সেখানে উচিত।
মার্টিন আর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.