রুবিতে এলোমেলোভাবে কীভাবে একটি অ্যারে বাছাই করা (স্ক্র্যাম্বেল) করা যায়?


উত্তর:


293

এখন অন্তর্নির্মিত:

[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]

3
এবং আপনি যদি এটি নিজে প্রয়োগ করতে চান: en.wikedia.org/wiki/Fisher- Yates_shuffle
জোয়

বা আপনি যদি এটি রুবির জন্য চান তবে <1.9: 'ব্যাকপোর্ট' দরকার
মার্ক-আন্দ্রে লাফোর্টুন

1
দেখে মনে হচ্ছে এটি রুবি ১.৮..7 এও রয়েছে।
ব্রায়ান আর্মস্ট্রং

এটি সম্পূর্ণ দুর্দান্ত।
সিডনি

1
কেবল যোগ করতে চেয়েছিলেন: আপনি যদি সংগ্রহটি প্রভাবিত করতে চান !তবে কলটি রদবদলের পরে একটি যুক্ত করুন । !এলোমেলো অ্যারে ছাড়া ফিরিয়ে দেওয়া হয় এবং একটি কার্যভারের জন্য পাকা হয়।
Muyiwa ওলু

27

রুবি ১.৮..6 এর জন্য (এতে অন্তর্নির্মিত ঝাঁকুনি নেই):

array.sort_by { rand }

11
@ জোশ: আপনি যে পৃষ্ঠায় লিঙ্ক করেছেন সেটি সম্পূর্ণ ভিন্ন অ্যালগরিদম বর্ণনা করে। নোট করুন যে রুবির sort_byফাংশন জাভাস্ক্রিপ্টের বাছাই ফাংশন (বা সেই বিষয়ে রুবির সাজানোর ফাংশন) এর মতো কাজ করে না, যা কেবল গণ্য সংখ্যাটি শূন্যের চেয়ে কম, শূন্য বা শূন্যের চেয়ে বড় কিনা তা যত্নশীল। পরিবর্তে sort_byপ্রতিটি আইটেমের জন্য গণিত মান মনে রাখে এবং তারপরে সেই মান অনুসারে আইটেমগুলি বাছাই করে। সুতরাং এই ক্ষেত্রে প্রতিটি আইটেম একটি এলোমেলো সংখ্যা নির্ধারিত হয় এবং তারপরে অ্যারেটি এলোমেলো সংখ্যা দ্বারা সাজানো হয়।
sepp2k

বড় আকারের অ্যারে সহ প্রতিটি আইটেমের জন্য এলোমেলো সংখ্যার দ্বারা এই সাজানোর ক্ষেত্রে খুব বেশি সময় লাগতে পারে (O (NLogN), আমরা আগের রেকর্ডগুলি পরিবর্তন করে ফেলেছি এবং আমরা তারপরে পরিবর্তন করতে পারি তবে আমরা একটি রৈখিক সময়ে এটি করতে পারতাম পুনরুক্তিকারীর বৃদ্ধি।
Downhillski

9

রুপি ১.৮..6 এর জন্য সেপপোকের উদাহরণ হিসাবে, তবে আপনি "শফল" পদ্ধতিটি এখনও ব্যবহার করতে চান।

class Array
  def shuffle
    sort_by { rand }
  end
end

[1,2,3,4].shuffle #=> [2,4,3,1]
[1,2,3,4].shuffle #=> [4,2,1,3]

চিয়ার্স


2

রুবি ১.৮. for এর জন্য কেবল অ্যারের জন্য ব্যাকপোর্টস রত্ন থেকে কোড । রুবি ১.৮..7 বা তার থেকেও উচ্চতর অন্তর্নির্মিত।

class Array
  # Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
  def shuffle
    dup.shuffle!
  end unless method_defined? :shuffle

  # Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
  def shuffle!
    size.times do |i|
      r = i + Kernel.rand(size - i)
      self[i], self[r] = self[r], self[i]
    end
    self
  end unless method_defined? :shuffle!
end

0

রুবি আরও বৈশিষ্ট্য এক্সটেনশন গ্রন্থাগার টি Randomমডিউল যা সহ দরকারী পদ্ধতি প্রদান করে shuffleএবং shuffle!সহ কোর শ্রেণীর একটি গুচ্ছ Array, Hashএবং String

আপনি যদি রেলগুলি ব্যবহার করছেন তবে অবশ্যই সাবধান থাকুন যেহেতু আমি যেমন বানরপাখি রেলগুলির সাথে সংঘর্ষ করেছিল তাতে কিছু কদর্য সংঘর্ষের অভিজ্ঞতা পেয়েছি ...

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