प्रत्येक तत्व की लंबाई के आधार पर एक सरणी को कैसे सॉर्ट करना है?


95

मेरे पास एक सरणी है:

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

छँटाई के बाद, उत्पादन सरणी होनी चाहिए:

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

मेरा मतलब है, मैं प्रत्येक तत्व की लंबाई के अवरोही क्रम में चाहता हूं।


1
sortबहुत सीधा आगे है, आपको कठिनाई कहाँ हो रही है?
म्यू

4
@ muistooshort अच्छी तरह से डिफॉल्ट सॉर्ट () तरह से स्ट्रिंग्स को अल्फ़ाबेटिकली, वह स्ट्रिंग के लिए देख रहा था। जैसा कि चुने हुए उत्तर में देखा जा सकता है।
छंटनी

जवाबों:


231

आप 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
});

मुझे लगता है कि यह आइटम की लंबाई कम करके सरणी को जोड़ देगा।
दाविदक

अहा यह टिप्पणी में है :) इसे पहली बार नहीं देखा
davidhq

बस एक जानकारी जोड़ने के लिए। यह स्निपेट सभी मामलों के लिए काम नहीं करेगा।
अरुणकुमार श्रीसैलपति

गिरफ्तारी के लिए प्रयास करें = ['ए ’,' बी’,, सी ’,, ई’, 'एफ ’, h जी’, g एच ’,' आई’, 'के ’,' एल’], यह विफल हो जाएगा
अरुणकुमार श्रीशैलपति

15
ईएस 6 रास्ताarr.sort((a, b) => b.length - a.length)
फर्गल

4

हम इस सरणी को सॉर्ट करने के लिए Array.sort विधि का उपयोग कर सकते हैं ।

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

ईएस 6 समाधान

ध्यान दें: सभी ब्राउज़र ES6 कोड को नहीं समझ सकते हैं!

ES6 में हम एरो फंक्शन एक्सप्रेशन का उपयोग कर सकते हैं ।

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

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

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


3

यहाँ एक तरह से जावास्क्रिप्ट के साथ एक स्ट्रिंग की लंबाई पर निर्भर करता है, जैसा कि आपने पूछा:

[बबल सॉर्ट द्वारा समस्या का हल] [१]

[१]: 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 );

ध्यान दें कि दुर्भाग्यवश, इस पृष्ठ पर बताए अनुसार, फ़ंक्शन को Array प्रोटोटाइप में नहीं जोड़ा जा सकता है / नहीं होना चाहिए ।

इसके अलावा, यह एक पैरामीटर के रूप में पारित सरणी को संशोधित करता है और कुछ भी वापस नहीं करता है। यह सरणी के दोहराव को मजबूर करेगा और बड़े सरणियों के लिए महान नहीं होगा। अगर किसी के पास एक बेहतर विचार है, तो कृपया टिप्पणी करें!


0

मैंने इसे संक्षिप्त बनाने के लिए @ श्रीफल के उत्तर को अनुकूलित किया। मैं उपयोग करता हूं,

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


यह कम लंबाई से अधिक लंबाई की तरह होगा
मिगुएल 16

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

1
अकेले कोड पोस्ट करने से मदद नहीं मिलेगी। आपका कोड क्या करता है, इसका संक्षिप्त विवरण दें।
कोडरपीसी

-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>

अनाम फ़ंक्शन जिसे आप सॉर्ट करना चाहते हैं, यह बताता है कि दिए गए एरे को कैसे सॉर्ट करना है। इससे मदद मिलती है। मुझे पता है कि यह भ्रामक है लेकिन आप सॉर्ट फ़ंक्शन को यह बता सकते हैं कि ऐरे के तत्वों को कैसे सॉर्ट करना है, इसे फंक्शन को पैरामीटर के रूप में बताएं यह क्या करना है


5
छँटाई तुलना समारोह को वापस करने के लिए क्या माना जाता है? यहाँ एक संकेत है: यह एक बूलियन नहीं है।
एमयू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.