2010-07-09 14 views
9
scala> List(1,2,3) == List(1,2,3) 

res2: Boolean = true 

scala> Map(1 -> "Olle") == Map(1 -> "Olle") 

res3: Boolean = true 

का अजीब व्यवहार लेकिन जब ऐरे के साथ ऐसा करने का प्रयास किया जाता है, तो यह वही काम नहीं करता है। क्यूं कर?ऐरे प्रकार

scala> Array('a','b') == Array('a','b') 

res4: Boolean = false 

मैंने 2.8.0.आरसी 7 और 2.8.0.बीटा 1-प्रीरलीज का उपयोग किया है।

+1

नोट: आप [स्कैला] [सरणी] – oluies

+0

के साथ सभी स्कैला से संबंधित सरणी प्रश्नों की खोज कर सकते हैं [\ "ऐरे (0,1,2) == ऐरे (0,1,2) \' क्यों संभव डुप्लिकेट [ अपेक्षित परिणाम वापस नहीं?] (http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1-2-not-return-the-expected-result) – Suma

उत्तर

17

क्योंकि Arrays के लिए "बराबर" की परिभाषा यह है कि वे एक ही सरणी को संदर्भित करते हैं।

यह Object.Equals का उपयोग करते हुए जावा की सरणी समानता के अनुरूप है, इसलिए यह संदर्भों की तुलना करता है।

आप जोड़ो में तत्वों की जांच करना चाहते हैं, तो sameElements

Array('a','b').sameElements(Array('a','b')) 

या deepEquals है, जो 2.8 में पदावनत किया गया है का उपयोग करें, तो बजाय का उपयोग करें:

Array('a','b').deep.equals(Array('a','b').deep) 

वहाँ array equality पर एक अच्छा Nabble चर्चा है ।

+2

क्या ऐरे है निर्मित संग्रह के लिए वास्तविक तत्वों की तुलना करने के सामान्य नियम के लिए केवल अपवाद? मैंने कोशिश की सभी अन्य संग्रह तत्वों की तुलना की है। –

+2

@olle - जहां तक ​​मुझे पता है, यह एकमात्र संग्रह है जो इस व्यवहार को प्रदर्शित करता है। यहां तक ​​कि 'ArrayList' तत्वों की तुलना करता है। जो मैं समझ नहीं पा रहा हूं, यह है कि यह दस्तावेज़ीकरण से कैसे सीखा जाना चाहिए :) – Stephen

+3

यह भी देखें http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1- 2-वापसी-अपेक्षित परिणाम – oluies

संबंधित मुद्दे