কিভাবে প্রতিটি উপাদান দৈর্ঘ্যের উপর ভিত্তি করে অ্যারে বাছাই?


100

আমার এইরকম অ্যারে রয়েছে:

arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"

বাছাইয়ের পরে আউটপুট অ্যারেটি হওয়া উচিত:

arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"  

আমি বলতে চাই, প্রতিটি উপাদানের দৈর্ঘ্যের ক্রমবর্ধমান ক্রমে আমি চাই।


4
sortবেশ সোজা এগিয়ে, আপনার কোথায় অসুবিধা হচ্ছে?
মিউ খুব ছোট

5
@ মিউস্টুশোর্ট ভাল ডিফল্ট বাছাই () বর্ণমালা অনুসারে স্ট্রিং সাজান, তিনি স্ট্রিংয়ের দৈর্ঘ্যের বাছাইয়ের সন্ধান করছিলেন নির্বাচিত উত্তরে যেমন দেখা যায় :)
jave.web

উত্তর:


239

Array.sortঅ্যারে বাছাই করার জন্য আপনি পদ্ধতিটি ব্যবহার করতে পারেন । বাছাইয়ের মানদণ্ড হিসাবে স্ট্রিংয়ের দৈর্ঘ্য বিবেচনা করে এমন একটি বাছাইকরণ ফাংশন:

arr.sort(function(a, b){
  // ASC  -> a.length - b.length
  // DESC -> b.length - a.length
  return b.length - a.length;
});

দ্রষ্টব্য: ["a", "b", "c"]স্ট্রিংয়ের দৈর্ঘ্য অনুসারে বাছাইয়ের নিশ্চয়তা নেই ["a", "b", "c"]চশমা অনুযায়ী :

বাছাই অগত্যা স্থিতিশীল নয় (যে উপাদানগুলি সমান তুলনা করে অগত্যা তাদের মূল ক্রমে থাকে না)।

যদি উদ্দেশ্যটি দৈর্ঘ্য অনুসারে বাছাই করা হয় তবে অভিধানের আদেশ অনুসারে আপনাকে অবশ্যই অতিরিক্ত মানদণ্ড নির্দিষ্ট করতে হবে:

["c", "a", "b"].sort(function(a, b) {
  return a.length - b.length || // sort by length, if equal then
         a.localeCompare(b);    // sort by dictionary order
});

আমি যুক্ত করব যে এই আইটেমের দৈর্ঘ্য হ্রাস দ্বারা অ্যারে বাছাই।
ডেভিডক

আহা এটি মন্তব্যে আছে :) প্রথমে এটি দেখতে পেলেন না
ডেভিডক

শুধু একটি তথ্য যুক্ত করতে। এই স্নিপেট সমস্ত ক্ষেত্রে কাজ করবে না।
অরুনকুমার শ্রীশৈলপাঠি

আরারের জন্য চেষ্টা করুন = ['এ', 'বি', 'সি', 'ডি', 'ই', 'চ', 'জি', 'এইচ', 'আই', 'কে', 'ল'], এটি ব্যর্থ হবে
অরুনকুমার শ্রীশৈলপাঠি

16
ES6 উপায়arr.sort((a, b) => b.length - a.length)
ফেরগল

5

এই অ্যারে বাছাই করতে আমরা অ্যারে.সোর্ট পদ্ধতি ব্যবহার করতে পারি ।

ES5 সমাধান

var array = ["ab", "abcdefgh", "abcd"];

array.sort(function(a, b){return b.length - a.length});

console.log(JSON.stringify(array, null, '\t'));

জন্য আরোহী সাজানোর ক্রম:a.length - b.length

জন্য সাজানো সাজানোর ক্রম:b.length - a.length

ES6 সমাধান

মনোযোগ দিন: সমস্ত ব্রাউজার ES6 কোড বুঝতে পারে না!

ES6 এ আমরা একটি তীর ফাংশন এক্সপ্রেশন ব্যবহার করতে পারি ।

let array = ["ab", "abcdefgh", "abcd"];

array.sort((a, b) => b.length - a.length);

console.log(JSON.stringify(array, null, '\t'));


3

আপনি যেভাবে জাভাস্ক্রিপ্টের সাথে স্ট্রিংয়ের দৈর্ঘ্যের উপর নির্ভর করে এখানে সাজান:

[বুদ্বুদ সাজানোর মাধ্যমে সমস্যার সমাধান] [1]

[১]: http://jsfiddle.net/sssonline2/vcme3/2/enter code here


0

সালমানের উত্তরের উপর ভিত্তি করে, আমি এটি ছোট করে একটি ফাংশন লিখেছি:

function sortArrayByLength(arr, ascYN) {
        arr.sort(function (a, b) {           // sort array by length of text
            if (ascYN) return a.length - b.length;              // ASC -> a - b
            else return b.length - a.length;                    // DESC -> b - a
        });
    }

তারপরে কেবল এটির সাথে কল করুন

sortArrayByLength( myArray, true );

মনে রাখবেন যে দুর্ভাগ্যক্রমে, ফাংশনগুলি অ্যারে প্রোটোটাইপটিতে যুক্ত করা যাবে না / যেমন এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে ।

এছাড়াও, এটি প্যারামিটার হিসাবে পাস করা অ্যারে সংশোধন করে এবং কোনও কিছুই ফেরায় না। এটি অ্যারের সদৃশকে বাধ্য করবে এবং বড় অ্যারেগুলির জন্য দুর্দান্ত হবে না। কারও যদি আরও ভাল ধারণা থাকে তবে কমেন্ট করুন!


0

আমি সংক্ষিপ্ত করতে @ শরীফের উত্তরটি অভিযোজিত করেছি। আমি ব্যবহার করি,

.sort(function(arg1, arg2) { return arg1.length - arg2.length })


এটি নিম্ন দৈর্ঘ্য থেকে উচ্চ দৈর্ঘ্যে সরে যাবে
মিগুয়েল

0
#created a sorting function to sort by length of elements of list
def sort_len(a):
    num = len(a)
    d = {}
    i = 0
    while i<num:
        d[i] = len(a[i])
        i += 1
    b = list(d.values())
    b.sort()
    c = []
    for i in b:
        for j in range(num):
            if j in list(d.keys()):
                if d[j] == i:
                    c.append(a[j])
                    d.pop(j)
    return c

4
কোড একা পোস্ট করা সাহায্য করবে না। আপনার কোডটি কী করে তার একটি সংক্ষিপ্ত বিবরণ দিন।
কোডারপিসি

0

আপনি যদি মূল অ্যারের সমান দৈর্ঘ্যের সাথে উপাদানটির ক্রম সংরক্ষণ করতে চান তবে বুদ্বুদ সাজান ব্যবহার করুন।

Input = ["ab","cdc","abcd","de"];

Output  = ["ab","cd","cdc","abcd"]

ফাংশন:

function bubbleSort(strArray){
  const arrayLength = Object.keys(strArray).length;
    var swapp;
    var newLen = arrayLength-1;
    var sortedStrArrByLenght=strArray;
    do {
        swapp = false;
        for (var i=0; i < newLen; i++)
        {
            if (sortedStrArrByLenght[i].length > sortedStrArrByLenght[i+1].length)
            {
               var temp = sortedStrArrByLenght[i];
               sortedStrArrByLenght[i] = sortedStrArrByLenght[i+1];
               sortedStrArrByLenght[i+1] = temp;
               swapp = true;
            }
        }
        newLen--;
    } while (swap);
  return sortedStrArrByLenght;
}

-1

এই কোডটি কৌশলটি করা উচিত:

var array = ["ab", "abcdefgh", "abcd"];

array.sort(function(a, b){return b.length - a.length});

console.log(JSON.stringify(array, null, '\t'));

-3
<script>
         arr = []
         arr[0] = "ab"
         arr[1] = "abcdefgh"
         arr[2] = "sdfds"
         arr.sort(function(a,b){
            return a.length<b.length
         })
         document.write(arr)

</script>

আপনি যে বেনামে ফাংশনটি বাছাই করেছেন তা এটি প্রদত্ত অ্যারেটিকে কীভাবে সাজান তা বলছে এটি সহায়তা করে I আমি জানি এটি বিভ্রান্তিকর তবে আপনি অ্যারের উপাদানগুলিকে প্যারামিটার হিসাবে একটি ফাংশনটি পাস করে কীভাবে সাজানোর জন্য তা বাছাই করতে পারেন function এটা কি করতে হবে


5
বাছাইয়ের তুলনা ফাংশনটি কী ফেরানোর কথা? এখানে একটি ইঙ্গিত দেওয়া হয়েছে: এটি কোনও বুলিয়ান নয়।
মিউ খুব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.