রুবিতে স্ট্রিংকে প্রতীক-সক্ষমে রূপান্তর করুন


241

প্রতীকগুলি সাধারণত এরূপ হিসাবে প্রতিনিধিত্ব করা হয়

:book_author_title

তবে আমার যদি স্ট্রিং থাকে:

"Book Author Title"

রেল / রুবিতে কোনও প্রতীক হিসাবে রূপান্তর করার জন্য কি সেখানে কোনও অন্তর্নির্মিত স্থান রয়েছে যেখানে আমি : কেবল কোনও কাঁচা স্ট্রিং রেজেক্স প্রতিস্থাপন না করে স্বরলিপি ব্যবহার করতে পারি ?


উত্তর:


360

রেলগুলি ActiveSupport::CoreExtensions::String::Inflectionsএমন মডিউল পেয়েছে যা এই জাতীয় পদ্ধতি সরবরাহ করে। এগুলি সকলেই দেখার মতো। আপনার উদাহরণের জন্য:

'Book Author Title'.parameterize.underscore.to_sym # :book_author_title

এটি সত্যিই ভাল কাজ করে! আপনার কোনও শব্দ আবহাওয়া থাকতে পারে বা না তারা যেখানে মূলধন। প্যারামিটারাইজ এটি বাছাই করবে।
দ্য লিজেন্ড

gsub ব্যবহার না করে এটিকে বিপরীত করার কোনও উপায় আছে কি?
জ্যাক

@ জ্যাক .to_sএবং .humanizeযদি আপনার পুরো মূলধন সংরক্ষণের প্রয়োজন না হয় তবে কাজটি করা উচিত।
টাইলার ডিয়াজ

যে কোনও কিছুতে রূপান্তর করার জন্য একটি ভাল উপায় হ'ল কোনও অপারেশন করতে সক্ষম হওয়া এবং পূর্বাবস্থায় ফিরে আসা। .to_sym এক দিককে (স্ট্রিং থেকে প্রতীকতে) রূপান্তর করতে পারে এবং .to_s (প্রতীক থেকে স্ট্রিংতে) রূপান্তর করতে পারে। এবং আপনি যদি অ্যারে নিয়ে কাজ করছেন তবে সমস্ত উপাদানকে রূপান্তর করতে .map (&: to_sym) বা .map (& to_s) বিবেচনা করুন।
জেসনলনহার্ড

2
প্যারামিটারাইজ ('_')। to_sym প্যারামিটারাইজ.ফাউন্ডসোর.টো_সাইম থেকে কিছুটা ছোট।
IAmNaN

228

থেকে: http://ruby-doc.org/core/classes/String.html#M000809

str.intern => symbol
str.to_sym => symbol

রিটার্নস সাংকেতিক সংশ্লিষ্ট strপ্রতীক তৈরি যদি এটা পূর্বে অস্তিত্ব ছিল না। দেখুন Symbol#id2name

"Koala".intern         #=> :Koala
s = 'cat'.to_sym       #=> :cat
s == :cat              #=> true
s = '@cat'.to_sym      #=> :@cat
s == :@cat             #=> true

এটি চিহ্ন ব্যবহার করে প্রতিনিধিত্ব করা যায় না এমন চিহ্ন তৈরি করতেও ব্যবহার করা যেতে পারে :xxx

'cat and dog'.to_sym   #=> :"cat and dog"

তবে আপনার উদাহরণের জন্য ...

"Book Author Title".gsub(/\s+/, "_").downcase.to_sym

যেতে হবে ;)


1
উজ্জ্বল উদাহরণ। ধন্যবাদ.
পল

8
আসল পোস্টারটি রেলের উত্তর দিয়ে খুশি হতে পারে তবে এই পোস্টটি জিজ্ঞাসা করা প্রকৃত প্রশ্নের উত্তর দেয়।
রাশ ব্যাটম্যান

2
এটি সত্য নয় যে "[ to_sym]] এমন চিহ্নগুলি তৈরি করতেও ব্যবহার করা যেতে পারে যা: xxx নোটেশন ব্যবহার করে প্রতিনিধিত্ব করা যায় না। :'cat and dog'হিসাবে একই 'cat and dog'.to_sym
মাইকেল ডারস্ট

2
এমনকি এমন :"cat and dog\n on a new line"কোনও বিদেশী কাজ যেমন প্রয়োজন ছাড়াই করতে পারে to_sym
মাইকেল ডার্স্ট

3
প্রশ্নটি ছিল রুবিতে রূপান্তরিত করার জন্য, রেলসকে নয়। এটি একটি সঠিক উত্তর।
কাটারজেনা

26
"Book Author Title".parameterize('_').to_sym
=> :book_author_title

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize

প্যারামিটারাইজ হ'ল একটি রেল পদ্ধতি এবং এটি আপনাকে পৃথককারী কী হতে চায় তা চয়ন করতে দেয়। এটি ডিফল্টরূপে "-" একটি ড্যাশ।


14

ইন্টার্ন → চিহ্নটি চিহ্নটি পূর্বে উপস্থিত না থাকলে চিহ্নটি তৈরি করে স্ট্রের সাথে সম্পর্কিত প্রতীকটি প্রদান করে

"edition".intern # :edition

http://ruby-doc.org/core-2.1.0/String.html#method-i-intern


আমার স্ট্রিং. টো_সিম সমাধানটি আমাকে একটি সুরক্ষা সতর্কতা দেয় বলে এটি পছন্দ করুন :)
ডেনি

11

কারাগারে আপনি underscoreপদ্ধতিটি ব্যবহার করে এটি করতে পারেন :

"Book Author Title".delete(' ').underscore.to_sym
=> :book_author_title

সরল কোডটি রেগেক্স ব্যবহার করছে (রুবির সাথে কাজ করে):

"Book Author Title".downcase.gsub(/\s+/, "_").to_sym
=> :book_author_title

3
এটি কেবল তখনই কাজ করবে যদি সমস্ত শব্দ মূলধন দিয়ে শুরু হয়, যদি এটি "আমার ফ্যাট কুকুর" হয় তবে এটি ফিরে আসবে: মাইফ্যাট_ডগ।
দ্য লিজেন্ড


1

এটি নিজেই প্রশ্নের উত্তর দিচ্ছে না, তবে আমি এই প্রশ্নটি একটি স্ট্রিংকে প্রতীক হিসাবে রূপান্তর করতে এবং এটি একটি হ্যাশটিতে ব্যবহার করার সমাধানের সন্ধান পেয়েছি।

hsh = Hash.new
str_to_symbol = "Book Author Title".downcase.gsub(/\s+/, "_").to_sym
hsh[str_to_symbol] = 10
p hsh
# => {book_author_title: 10}

আশা করি এটি আমার মতো কাউকে সাহায্য করবে!

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