अब तक सुझाव दिया गया है कि यह एक छोटा सा समाधान है। सबसे पहले अपने रिकॉर्ड को परिभाषित:
1> rd(myrec, {id=0, price=0, quantity=0}).
myrec
तब के आविष्कार उनमें से 3 करते हैं:
2> A = #myrec{id=1, price=10, quantity=2}, B = #myrec{id=2, price=4, quantity=3}, C = #myrec{id=3, price=10, quantity=1}.
#myrec{id = 3,price = 10,quantity = 1
अब हम एक तुलना समारोह की जरूरत है। यह वह जगह है जहां समाधान छोटा है। Erlang क्रम में वे दिखाई देते में एक टपल के मामले की तुलना कर सकते हैं, इसलिए यदि हम मूल्य द्वारा क्रमबद्ध करना चाहते हैं, तो आईडी से, हम बस प्रपत्र {PriceA, IdA} < {PriceB, IdB}
के दो tuples तुलना करने के लिए है:
3> F = fun(X, Y) -> {X#myrec.price, X#myrec.id} < {Y#myrec.price, Y#myrec.id} end.
#Fun<erl_eval.12.113037538>
और lists:sort/2
इसे प्लग :
4> lists:sort(F, [C,B,A]).
[#myrec{id = 2,price = 4,quantity = 3},
#myrec{id = 1,price = 10,quantity = 2},
#myrec{id = 3,price = 10,quantity = 1}]
आदेश अब [B, A, C]
है और अपनी सूची सॉर्ट हो जाता है।
नोट अगर आप उतरते आईडी बजाय द्वारा सॉर्ट करने के लिए चाहता था, आप इस प्रकार tuples में आईडी पीछे से यह धोखा हो सकता है कि:
5> G = fun(X, Y) -> {X#myrec.price, Y#myrec.id} < {Y#myrec.price, X#myrec.id} end.
#Fun<erl_eval.12.113037538>
6> lists:sort(G, [C,B,A]).
[#myrec{id = 2,price = 4,quantity = 3},
#myrec{id = 3,price = 10,quantity = 1},
#myrec{id = 1,price = 10,quantity = 2}]
हमें [B, C, A]
देते। यह पाठक के लिए स्पष्ट नहीं है, इसलिए आप इसे बेहतर तरीके से दस्तावेज करेंगे या इस मामले में डस्टिन के समाधान का उपयोग करेंगे। यहां प्रस्तुत समाधान का लाभ यह है कि कोई घोंसले की आवश्यकता नहीं है। तुलना में या तो टुपल में तत्वों को सेट करके, आप जितना अधिक चाहते हैं उतना अधिक कोड बनाये बिना जितना चाहें उतना अधिक तुलना कर सकते हैं।
बस सादा ठंडा है। धन्यवाद – nisbus
यह मामला है तो क्यों एक फ़ंक्शन f परिभाषित करें, क्यों न केवल सूचियां: क्रमबद्ध करें ([सी, बी, ए])? – Vishal