2011-11-29 28 views
3

Array.Reverse()方法如何在沒有任何賦值的情況下顛倒單詞數組?Array.Reverse()如何反轉字符串而不分配?

+0

你知道關於指針嗎?我知道C#沒有明確指向,但是你知道它背後的概念嗎? –

+3

用手在紙上解決,一步一步展示你的作品(用文字或圖片,以你最容易的爲準)。有點像你會遇到一個數學問題,除了你或多或少地在紙上執行一個程序。這種棘手的數組邏輯在使用該策略時更容易理解。 –

+0

這可能值得在這裏閱讀:http://www.codeproject.com/KB/cs/csharpstringreversal.aspx –

回答

5

該方法修改數組本身,所以你可以馬上使用它的反轉狀態;沒有必要返回數組的一個副本來分配回您的現有變量。數組是參考類型,因此可以在不重新分配的情況下對其內容進行修改。

查看MSDN entry for Array.Reverse()arrays in the C# programming guide

+0

它在哪裏得到存儲,而倒車發生。 – syaur

+1

在顛倒過程中不太可能完整地存儲。想象一下這個詞在一張紙上,你只有一把剪刀。你會如何反轉一個詞? –

+1

@ user1070662,數組本身存儲在堆上,但我們不用擔心這一點。該數組是一個引用類型。所有你傳入的方法是*參考*到數組的位置。你傳遞一個地址。該代碼然後作用於該地址處的對象(您的數組)。這就像你的房子專業繪畫。你不把你的房子送給畫家,你只需告訴他你的房子在哪裏。你的房子塗上了地方。同樣,該陣列在適當位置顛倒過來。 –

0

核心方法:

while (num < num2) 
     { 
      object obj3 = array.GetValue(num); 
      array.SetValue(array.GetValue(num2), num); 
      array.SetValue(obj3, num2); 
      num++; 
      num2--; 
     } 

兩種方式交換你的RAM作爲一個巨大的箱體一大堆抽屜的

+2

對於OP來說,這是一個初學者編程的問題,這引發了更多的問題。每一步的解釋都會讓這個答案更有價值。 –

3

思考。假設每個抽屜可以放一個字母。如果你想扭轉你的話,你會在你的櫥櫃中的另一個位置製作每封信的副本,還是隻是在必要時將信件從原始位置交換出去? Array.Reverse()使用第二種方法。