২০১ update আপডেট:
এখানে একটি snazzier ইকমাস্ক্রিপ্ট 6 সংস্করণ:
zip= rows=>rows[0].map((_,c)=>rows.map(row=>row[c]))
ইলাস্ট্রেশন সমতুল্য থেকে পাইথন { zip(*args)
}:
> zip([['row0col0', 'row0col1', 'row0col2'],
['row1col0', 'row1col1', 'row1col2']]);
[["row0col0","row1col0"],
["row0col1","row1col1"],
["row0col2","row1col2"]]
(এবং ফিজিটিয়া দেখায় যে ES6 এর বৈচিত্র্যপূর্ণ আর্গুমেন্ট সিনট্যাক্স রয়েছে, সুতরাং নিম্নলিখিত ফাংশন সংজ্ঞাটি অজগরটির মতো কাজ করবে, তবে অস্বীকার করার জন্য নীচে দেখুন ... এটি তার নিজস্ব বিপরীত zip(zip(x))
হবে না তাই সমান হবে না x
; যদিও ম্যাট ক্র্যামার উল্লেখ করেছেন zip(...zip(...x))==x
(যেমন নিয়মিত অজগরে zip(*zip(*x))==x
))
বিকল্প সংজ্ঞা সমতুল্য। থেকে পাইথন { zip
}:
> zip = (...rows) => [...rows[0]].map((_,c) => rows.map(row => row[c]))
> zip( ['row0col0', 'row0col1', 'row0col2'] ,
['row1col0', 'row1col1', 'row1col2'] );
// note zip(row0,row1), not zip(matrix)
same answer as above
(মনে রাখবেন যে ...
সিনট্যাক্সের এই সময়ে পারফরম্যান্সের সমস্যা থাকতে পারে এবং ভবিষ্যতে সম্ভবত ভবিষ্যতেও হতে পারে, তাই যদি আপনি ভিন্ন ভিন্ন যুক্তি দিয়ে দ্বিতীয় উত্তরটি ব্যবহার করেন তবে আপনি এটি পরীক্ষা নিখুঁত করতে চাইতে পারেন))
এখানে একজন অনেলিনার:
function zip(arrays) {
return arrays[0].map(function(_,i){
return arrays.map(function(array){return array[i]})
});
}
// > zip([[1,2],[11,22],[111,222]])
// [[1,11,111],[2,22,222]]]
// If you believe the following is a valid return value:
// > zip([])
// []
// then you can special-case it, or just do
// return arrays.length==0 ? [] : arrays[0].map(...)
উপরের অংশে ধার্য করা হয়েছে যে অ্যারেগুলি সমান আকারের, যেমন হওয়া উচিত। এটি ধরে নিয়েছে যে পাইথনের সংস্করণটি যেখানে আর্গুমেন্টের তালিকাটি বৈকল্পিক, তার পরিবর্তে তালিকার যুক্তিগুলির একটি তালিকাতে আপনি পাস করেছেন। আপনি যদি এই সমস্ত "বৈশিষ্ট্য" চান তবে নীচে দেখুন। কোডটির প্রায় 2 অতিরিক্ত লাইন লাগে takes
zip
নীচে অ্যারেগুলি সমান আকারের নয় এমন ধরণের ক্ষেত্রে পাইথনের আচরণের অনুকরণ করা হবে , নীরবে ভান করে অ্যারেগুলির দীর্ঘ অংশগুলি বিদ্যমান নেই:
function zip() {
var args = [].slice.call(arguments);
var shortest = args.length==0 ? [] : args.reduce(function(a,b){
return a.length<b.length ? a : b
});
return shortest.map(function(_,i){
return args.map(function(array){return array[i]})
});
}
// > zip([1,2],[11,22],[111,222,333])
// [[1,11,111],[2,22,222]]]
// > zip()
// []
এটি পাইথনের itertools.zip_longest
আচরণের অনুকরণ করবে , undefined
যেখানে অ্যারে সংজ্ঞায়িত করা হয়নি সেখানে সন্নিবেশ করানো হবে :
function zip() {
var args = [].slice.call(arguments);
var longest = args.reduce(function(a,b){
return a.length>b.length ? a : b
}, []);
return longest.map(function(_,i){
return args.map(function(array){return array[i]})
});
}
// > zip([1,2],[11,22],[111,222,333])
// [[1,11,111],[2,22,222],[null,null,333]]
// > zip()
// []
আপনি যদি এই শেষ দুটি সংস্করণটি (ভেরিয়াদিক ওরফে একাধিক-যুক্তি সংস্করণ) ব্যবহার করেন তবে জিপটি আর তার নিজস্ব বিপরীত হবে না। zip(*[...])
পাইথন থেকে আইডিয়োম নকল করতে , আপনি zip.apply(this, [...])
জিপ ফাংশনটি উল্টাতে চান বা আপনি একইভাবে ইনপুট হিসাবে তালিকাতে একটি পরিবর্তনশীল সংখ্যক থাকতে চান এমনটি করতে হবে।
সংযোজন :
এই হ্যান্ডেলটি যেকোন পুনরাবৃত্তযোগ্য (উদাহরণস্বরূপ পাইথনে আপনি zip
স্ট্রিং, রেঞ্জ, ম্যাপ অবজেক্টস ইত্যাদিতে ব্যবহার করতে পারেন ) তৈরি করতে আপনি নিম্নলিখিতটি সংজ্ঞায়িত করতে পারেন:
function iterView(iterable) {
// returns an array equivalent to the iterable
}
তবে আপনি যদি zip
নিম্নলিখিত পদ্ধতিতে লিখেন , এমনকি এটি প্রয়োজনীয় হবে না:
function zip(arrays) {
return Array.apply(null,Array(arrays[0].length)).map(function(_,i){
return arrays.map(function(array){return array[i]})
});
}
ডেমো:
> JSON.stringify( zip(['abcde',[1,2,3,4,5]]) )
[["a",1],["b",2],["c",3],["d",4],["e",5]]
(অথবা আপনি range(...)
যদি ইতিমধ্যে একটি লিখে থাকেন তবে আপনি পাইথন-স্টাইলের ফাংশন ব্যবহার করতে পারেন Event অবশেষে আপনি ECMAScript অ্যারে উপলব্ধি বা জেনারেটর ব্যবহার করতে সক্ষম হবেন))