উত্তর:
রুবি 2.5 হিসাবে আপনি ব্যবহার করতে পারেন delete_suffix
বা delete_suffix!
এটি দ্রুত এবং পঠনযোগ্য পদ্ধতিতে অর্জন করতে পারেন ।
পদ্ধতিগুলির ডকগুলি এখানে রয়েছে ।
প্রত্যয়টি কী তা যদি আপনি জানেন তবে এটি মূর্খবাদী (এবং আমি যুক্তি জানাতে পারি, এখানে অন্যান্য উত্তরের চেয়ে আরও বেশি পঠনযোগ্য):
'abc123'.delete_suffix('123') # => "abc"
'abc123'.delete_suffix!('123') # => "abc"
শীর্ষ উত্তরের চেয়ে এটি আরও উল্লেখযোগ্যভাবে দ্রুত ( ঠ্যাং পদ্ধতি সহ প্রায় 40% )। এখানে একই মানদণ্ডের ফলাফল:
user system total real
chomp 0.949823 0.001025 0.950848 ( 0.951941)
range 1.874237 0.001472 1.875709 ( 1.876820)
delete_suffix 0.721699 0.000945 0.722644 ( 0.723410)
delete_suffix! 0.650042 0.000714 0.650756 ( 0.651332)
আমি আশা করি এটি কার্যকর হয়েছে - নোটটি পদ্ধতিটি বর্তমানে একটি রেজেক্স গ্রহণ করে না তাই আপনি যদি প্রত্যয়টি জানেন না তবে এটি আপাতত কার্যকর নয়। যাইহোক, গৃহীত উত্তর ( আপডেট: লেখার সময় ) একই নির্দেশ করে, আমি ভেবেছিলাম এটি কিছু লোকের পক্ষে দরকারী।
What is the preferred way of removing the last n characters from a string?
irb> 'now is the time'[0...-4]
=> "now is the "
[0...-4]
নয়[0..-4]
আপনি যে অক্ষরগুলি মুছতে চান তা যদি সর্বদা একই অক্ষর হয় তবে বিবেচনা করুন chomp
:
'abc123'.chomp('123') # => "abc"
এর সুবিধাগুলি chomp
হ'ল: গণনা নেই এবং কোডটি কী করছে তা আরও স্পষ্টভাবে জানিয়ে দেয় ic
কোনও যুক্তি ছাড়াই chomp
ডস বা ইউনিক্স লাইনটি শেষ হয়ে যায়, যদি হয় তবে:
"abc\n".chomp # => "abc"
"abc\r\n".chomp # => "abc"
মন্তব্যগুলি থেকে, #chomp
একটি ব্যাপ্তি ব্যবহারের বিপরীতে ব্যবহারের গতি সম্পর্কে একটি প্রশ্ন ছিল । এখানে দুটি তুলনা করার একটি মানদণ্ড রয়েছে:
require 'benchmark'
S = 'asdfghjkl'
SL = S.length
T = 10_000
A = 1_000.times.map { |n| "#{n}#{S}" }
GC.disable
Benchmark.bmbm do |x|
x.report('chomp') { T.times { A.each { |s| s.chomp(S) } } }
x.report('range') { T.times { A.each { |s| s[0...-SL] } } }
end
বেঞ্চমার্ক ফলাফল (CRuby 2.13p242 ব্যবহার করে):
Rehearsal -----------------------------------------
chomp 1.540000 0.040000 1.580000 ( 1.587908)
range 1.810000 0.200000 2.010000 ( 2.011846)
-------------------------------- total: 3.590000sec
user system total real
chomp 1.550000 0.070000 1.620000 ( 1.610362)
range 1.970000 0.170000 2.140000 ( 2.146682)
সুতরাং chomp একটি ব্যাপ্তি ব্যবহারের চেয়ে 22% বেশি দ্রুত হয়।
chomp!()
জায়গায় জায়গায় স্ট্রিংয়ের কাজ করতে ব্যবহার করতে পারেন ।
str = str[0...-n]
আমি পরামর্শ দেব chop
। আমি মনে করি এটির একটি মন্তব্যে এটি উল্লেখ করা হয়েছে তবে লিঙ্ক বা ব্যাখ্যা ছাড়াই এখানে কেন আমি আরও ভাল বলে মনে করি:
এটি কেবল স্ট্রিং থেকে শেষ চরিত্রটি সরিয়ে দেয় এবং এটি হওয়ার জন্য আপনাকে কোনও মান নির্দিষ্ট করতে হবে না।
যদি আপনার একাধিক চরিত্র অপসারণ করতে হয় তবে chomp
আপনার সেরা বাজি। এই কি রুবি ডক্স সম্পর্কে কী বলার আছে chop
:
শেষ অক্ষরটি সরিয়ে একটি নতুন স্ট্রিং ফেরত দেয়। যদি স্ট্রিংটি \ r \ n দিয়ে শেষ হয় তবে উভয় অক্ষর সরানো হবে। একটি খালি স্ট্রিং চপ প্রয়োগ একটি খালি স্ট্রিং ফিরে। স্ট্রিং # Chomp প্রায়শই একটি নিরাপদ বিকল্প, কারণ এটি রেকর্ড পৃথক পৃথক স্থানে শেষ না হলে স্ট্রিংটি অপরিবর্তিত রাখে।
যদিও এটি বেশিরভাগ বিভাজকগুলি অপসারণ করতে ব্যবহৃত হয় যেমন \r\n
আমি একটি সাধারণ স্ট্রিং থেকে শেষ চরিত্রটি সরিয়ে ফেলতে এটি ব্যবহার করেছি, উদাহরণস্বরূপ s
শব্দটি একবচন করার জন্য।
শেষ n
অক্ষরগুলি বাদ দেওয়া প্রথম length - n
অক্ষর রাখার সমান ।
অ্যাক্টিভ সহায়তায় অন্তর্ভুক্ত রয়েছে String#first
এবং String#last
পদ্ধতিগুলি যা প্রথম / শেষ n
অক্ষরগুলি রাখার বা ফেলে দেওয়ার জন্য একটি সুবিধাজনক উপায় সরবরাহ করে :
require 'active_support/core_ext/string/access'
"foobarbaz".first(3) # => "foo"
"foobarbaz".first(-3) # => "foobar"
"foobarbaz".last(3) # => "baz"
"foobarbaz".last(-3) # => "barbaz"
আপনি যদি রেল ব্যবহার করছেন, চেষ্টা করুন:
"my_string".last(2) # => "ng"
[সম্পাদনা]
শেষ 2 টি অক্ষর ছাড়া স্ট্রিংটি পেতে:
n = "my_string".size
"my_string"[0..n-3] # => "my_stri"
দ্রষ্টব্য: শেষ স্ট্রিং চরটি এন -1 এ রয়েছে। সুতরাং, শেষ 2 অপসারণ করতে, আমরা এন -3 ব্যবহার করি।
আপনি সর্বদা এরকম কিছু ব্যবহার করতে পারেন
"string".sub!(/.{X}$/,'')
X
অক্ষরের সংখ্যা কোথায় সরানো হবে।
অথবা ফলাফল নির্ধারণ / ব্যবহার করে:
myvar = "string"[0..-X]
যেখানে X
অক্ষরের সংখ্যা প্লাস এক মুছে ফেলার জন্য।
পরীক্ষা করে দেখুন slice()
পদ্ধতি:
আপনি যদি শ্রেণিবদ্ধ পদ্ধতি তৈরির ক্ষেত্রে ঠিক থাকেন এবং যে অক্ষরগুলি কেটে ফেলতে চান তা চাইলে এটি চেষ্টা করুন:
class String
def chop_multiple(amount)
amount.times.inject([self, '']){ |(s, r)| [s.chop, r.prepend(s[-1])] }
end
end
hello, world = "hello world".chop_multiple 5
hello #=> 'hello '
world #=> 'world'
রিজেক্স ব্যবহার:
str = 'string'
n = 2 #to remove last n characters
str[/\A.{#{str.size-n}}/] #=> "stri"
x = "my_test"
last_char = x.split('').last
delete_suffix
রুবি 2.5 থেকে ব্যবহার করতে পারেন । আরও তথ্য এখানে ।