উত্তর:
শ্নিপারসনের পরিবর্তনের উত্তর:
my $a='0123456789';
with $a {$_=.comb[(^* ∖ (1..3, 8).flat).keys.sort].join};
say $a;
এক লাইনে:
say '0123456789'.comb[(^* ∖ (1..3, 8).flat).keys.sort].join;
বা একটি ফাংশন দ্বারা ডাকা:
sub remove($str, $a) {
$str.comb[(^* ∖ $a.flat).keys.sort].join;
}
say '0123456789'.&remove: (1..3, 8);
বা স্ট্রির বৃদ্ধির সাথে:
use MONKEY-TYPING;
augment class Str {
method remove($a) {
$.comb[(^* ∖ $a.flat).keys.sort].join;
}
};
say '0123456789'.remove: (1..3, 8);
MONKET-TYPING
যদি এটিকে কেবল বিনামূল্যে ভাসমান পদ্ধতি তৈরি করেন এবং এটিকে কল করেন তবে এটি ব্যবহার করতে হবে 'foobar'.&remove: (1..2, 4);
না (বেশ কয়েকবার ব্যবহার করা থাকলে রচনাটির ক্ষেত্রে বাড়াতে সমস্যা হতে পারে)
.&remove
নোট-অন অপারেশনের জন্য আমার সর্বশেষ ধারণা (আমি নীচে বাস্তবায়নটি কভার করব):
ব্যবহার:
say '0123456789'[- 1..3, 8 ]; # 045679
ব্র্যাডের সমাধান কার্যকর করা, মোড়ানো (একটি বৈকল্পিক):
multi postcircumfix:<[- ]> (|args) { remove |args }
sub remove( Str:D $str is copy, +@exdices){
for @exdices.reverse {
when Int { $str.substr-rw($_,1) = '' }
when Range { $str.substr-rw($_ ) = '' }
}
$str
}
say '0123456789'[- 1..3, 8 ]; # 045679
আমি ঘোষিত অপারেটরটি ব্যবহার করার সিনট্যাক্সটি হ'ল string[- list-of-indices-to-be-subtracted ]
পরিচিত পরিচিতিটি ব্যবহার [...]
করে তবে বামদিকে একটি স্ট্রিং এবং খোলার পরে অতিরিক্ত বিয়োগের[
সাহায্যে সাবস্ক্রিপ্টের বিষয়বস্তু সূচকগুলির পরিবর্তে এক্সডিসির একটি তালিকা বলে বোঝায় ।
[সম্পাদনা: আমি আমার আসল বাস্তবায়ন ব্র্যাডের সাথে প্রতিস্থাপন করেছি। এটি সম্ভবত ভুল-মাথাভিত্তিক কারণ ব্র্যাড নোট হিসাবে তাঁর সমাধান "ধরে নিয়েছে যে [বাহ্যিকগুলি] নীচ থেকে সর্বোচ্চের দিকে চলেছে এবং কোনও ওভারল্যাপ নেই।", এবং অন্যথায় প্রতিশ্রুতি না দিলে ব্যবহার [- ... ]
করা ভয়াবহভাবে নিকটে রয়েছে। তাই করছেন. সুতরাং যদি এই সিনট্যাক্স চিনিটি কারও দ্বারা ব্যবহৃত হয় তবে তাদের সম্ভবত ব্র্যাডের সমাধান ব্যবহার করা উচিত নয়। ব্র্যাডের ধারণাটি দূর করার সম্ভবত একটি উপায় রয়েছে।]
আমি এই বাক্য গঠনটি পছন্দ করি তবে আমি সচেতন যে ল্যারি ইচ্ছাকৃতভাবে সূচক স্ট্রিংগুলির ব্যবহার করতে পারেনি[...]
তাই সম্ভবত আমার এখানে বাক্য গঠনটি ব্যাপকভাবে গ্রহণের জন্য অনুপযুক্ত। কিছু ভাল বন্ধনী অক্ষর ব্যবহার করা হলে এটি আরও ভাল হবে। তবে আমি মনে করি একটি সাধারণ পোস্টকার্কফ্যামিক্স সিনট্যাক্স ব্যবহার দুর্দান্ত।
(আমি [ ... ]
স্ট্রিংকে ঠিক একই পদ্ধতিতে সূচি প্রয়োগের জন্য একটি সরল বৈকল্পিক প্রয়োগ করার চেষ্টা করেছি Positional
কিন্তু আজ রাতে আমার চেয়ে বেশি কারণেই এটি কাজ করতে ব্যর্থ [+ ... ]
হয়েছি We অদ্ভুতভাবে এক্সডিসিগুলি করতে কাজ করবে তবে সূচকগুলি করতে পারবে না; যা তোলে আমার কাছে মোটেই বুদ্ধি নেই! যাইহোক, আমি আমার যা পোস্ট করব এবং এই উত্তরটি সম্পূর্ণ বিবেচনা করব consider)
[সম্পাদনা করুন: উপরের সমাধানটির দুটি দিক রয়েছে যা আলাদা হিসাবে দেখা উচিত। প্রথমত, একজন ব্যবহারকারী-সংজ্ঞায়িত অপারেটর, সিনট্যাকটিক চিনি postcircumfix:<[- ]> (Str ...
, ঘোষণার মাধ্যমে সরবরাহ করে । দ্বিতীয়ত, সেই ঘোষণার মূল অংশ। উপরের দিকে আমি ব্র্যাডের সমাধান (এর একটি বৈকল্পিক) ব্যবহার করেছি। আমার মূল উত্তরটি নীচে]
যেহেতু আপনার প্রশ্নটি একটি সূচকগুলি মুছে ফেলার জন্য উত্সাহিত করে [সম্পাদনা: ব্র্যাডের উত্তর অনুযায়ী ভুল,].comb
, এবং join
ফলাফলটি পুনরায় সাজিয়ে তোলে, আপনার প্রশ্নটি মূলত একটি সদৃশ ...
অ্যারে বা তালিকা উপাদান তালিকাভুক্ত করার একটি দ্রুত উপায় কী? [ .comb ... .join
]] উত্তরগুলির জন্য এখানে আরও সমাধান যুক্ত করুন।
দুটি মাল্টিস হিসাবে প্রয়োগ করা হয়েছে যাতে একই বাক্য গঠনটি Positional
এস এর সাথে ব্যবহার করা যায় :
multi postcircumfix:<[- ]> (Str $_, *@exdex) { .comb[- @exdex ].join }
multi postcircumfix:<[- ]> (@pos, *@exdex) { sort keys ^@pos (-) @exdex }
say '0123456789'[- 1..3, 8 ]; # 045679
say (0..9)[- 1..3, 8 ]; # (0 4 5 6 7 9)
sort keys ^@pos (-) @exdices
বাস্তবায়ন মাত্র @ সেবাস্টিয়ান এর উত্তর সামান্য সরলীকৃত সংস্করণ। আমি উপরের লিঙ্ক করা আগের উত্তর থেকে jnthn এর সমাধানের বিপরীতে আমি এটি বেঞ্চমার্ক করি নি তবে যদি এটি দ্রুত হয় তবে পরিবর্তে এটি বদলে নেওয়া যেতে পারে। * [সম্পাদনা করুন: স্পষ্টতই এটি স্ট্রিং ভেরিয়েন্টের পরিবর্তে ব্র্যাডের সমাধান হওয়া উচিত ]]
এখনও অন্য রূপগুলি:
print $_[1] if $_[0] !(elem) (1,2,3,8) for ^Inf Z 0..9;
.print for ((0..9) (-) (1,2,3,8)).keys;
প্রত্যেকেই হয় comb
সূচকগুলির একটি ফ্ল্যাট তালিকা ব্যবহার করে বা স্ট্রিংকে তালিকায় পরিণত করে ।
Those জিনিসগুলির কোনওটিই করার কোনও কারণ নেই
sub remove( Str:D $str is copy, +@indices ){
for @indices.reverse {
when Int { $str.substr-rw($_,1) = '' }
when Range { $str.substr-rw($_ ) = '' }
}
}
remove("0123456789", 1..3, 8 ); # 045679
remove("0123456789", [1..3, 8]); # 045679
উপরের দিক থেকে ধরে নেওয়া হয়েছে যে সূচকগুলি সর্বনিম্ন থেকে সর্বোচ্চে ক্রমযুক্ত এবং কোনও ওভারল্যাপ নেই।
my $s = "0123456789" x 1000; my $l = (1..3, 8, 40, 100, 1001, 4000..4100).flat
) 150 এর একটি ফ্যাক্টর দ্বারা দ্রুততম উত্তর । ঝুঁটি দীর্ঘ স্ট্রিং ধন্যবাদ @BradGilbert জন্য দীর্ঘ, এই স্পষ্টভাবে কিছু লোক সাহায্য করবে, অন্তত আমার :-) এ
.comb
এটি ব্যবহার করবেন তখন সেগুলি অনেকগুলি তৈরি করতে হবে এবং তাদের আবার একত্রিত করতে হবে। সঙ্গে substr
এটা সম্ভব হিসাবে যারা বস্তুর কয়েক যেমন সৃষ্টি করে।
my $string='0123456789';
for (1..3, 8).flat.reverse { $string.substr-rw($_, 1) = '' }